SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.10.2011 16:37:50

are17
Участник
Зарегистрирован: 21.10.2011
Сообщений: 5

Расчет найденых параметров и вывод их

Дана база данных пользователей

CREATE TABLE `users` (
   `user_id` int(11) NOT NULL default '0',
   `birthday` date NOT NULL default '0000-00-00',
   `nickname` char(32) NOT NULL default '',
   `password` char(32) NOT NULL default '',
   PRIMARY KEY  (`user_id`)
)

нужно сделать SQL запрос на получение информации о ближайших днях рождения
вот собвенно мой запрос

SELECT *
FROM `users`
WHERE IF( 366 - DAYOFYEAR( NOW( ) ) >365, (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365 )
AND (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0
), (
(
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365
)
AND (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0
)
)
OR (
( 366 - DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365 )
AND ( 366 - DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0 )
)
)
LIMIT 0 , 30

как мне теперь вывести дополнительное поле, которое будет содержать количество исполняемых лет пользователю?
нужно сделать все в одном запросе, выводить вместе с найденными БЛИЖАЙшими имениниками

LIMIT 0, 5 - вывожу 5  результатов?

Отредактированно are17 (21.10.2011 16:52:46)

Неактивен

 

#2 21.10.2011 20:04:47

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Расчет найденых параметров и вывод их

Я не совсем понял подсчёты которые вы тут делали. Но в принципе можно сделать так.

select users.*,
if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'
from users
where (month(birthday)=month(now())) or (month(birthday)=month(now()+interval 1 month))

Это условие по которому получаем именинников ближайших двух месяцев.
where (month(birthday)=month(now())) or (month(birthday)=month(now()+interval 1 month))

Это подсчёт возраста
if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'

Отредактированно evgeny (21.10.2011 20:06:18)

Неактивен

 

#3 21.10.2011 20:42:01

are17
Участник
Зарегистрирован: 21.10.2011
Сообщений: 5

Re: Расчет найденых параметров и вывод их

evgeny написал:

Я не совсем понял подсчёты которые вы тут делали. Но в принципе можно сделать так.

select users.*,
if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'
from users
where (month(birthday)=month(now())) or (month(birthday)=month(now()+interval 1 month))

Это условие по которому получаем именинников ближайших двух месяцев.
where (month(birthday)=month(now())) or (month(birthday)=month(now()+interval 1 month))

Это подсчёт возраста
if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'

спасибо за предложенное но ничего не получилось....  sad

поеснию еще раз

запрос с поиском ближайших имениников я сделал.... вопрос как реализовать добавление еще одной колонке, и посчитать к в выведеным найденым ближайшим именниникам, сколько лет им исполниться....

+ еще загвозка в переходе года.... некоторым может исполниться +1

Неактивен

 

#4 22.10.2011 14:17:14

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Расчет найденых параметров и вывод их

вопрос как реализовать добавление еще одной колонке, и посчитать к в выведеным найденым ближайшим именниникам, сколько лет им исполниться....

Ну так чем не подходит мой вариант ?

Это текущий возраст

if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'


Это сколько исполнится.
(year(now())-year(birthday)) as 'age'

Отредактированно evgeny (22.10.2011 14:21:16)

Неактивен

 

#5 22.10.2011 23:46:34

are17
Участник
Зарегистрирован: 21.10.2011
Сообщений: 5

Re: Расчет найденых параметров и вывод их

evgeny написал:

вопрос как реализовать добавление еще одной колонке, и посчитать к в выведеным найденым ближайшим именниникам, сколько лет им исполниться....

Ну так чем не подходит мой вариант ?

Это текущий возраст

if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'age'


Это сколько исполнится.
(year(now())-year(birthday)) as 'age'

пытаюсь вставить твои варианты пишет что синтаксическая ошибка

напиши плиз как для дауна) добавь к моему коду свое решение, что бы получился SQL запрос

(перепробывал кучу вариантов, нефига не вышло.... добавлял WHERE, SELECT... проверял на синтаксис в ++ sad ступор)

Неактивен

 

#6 23.10.2011 23:13:22

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Расчет найденых параметров и вывод их

SELECT
if((month(now())>=month(birthday)) and (day(now())>=day(birthday)),year(now())-year(birthday),year(now())-year(birthday)-1) as 'current_age',
(year(now())-year(birthday)) as 'year_age',
`users`.*
FROM `users`
WHERE IF( 366 - DAYOFYEAR( NOW( ) ) >365, (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365 )
AND (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0
), (
(
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365
)
AND (
DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0
)
)
OR (
( 366 - DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) <365 )
AND ( 366 - DAYOFYEAR( Birthday ) - DAYOFYEAR( NOW( ) ) >=0 )
)
)
LIMIT 0 , 30;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson