Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > выбрать людей определенного возраста


Автор: lumentek 27.2.2010, 20:26
Всем привет. в таблице БД MySQL имеется поле data - возвраст пользователя.
Мне нужно выбрать всех пользователей, которым меньше или равно 14 лет. тип данных поля DATE
Подскажите как более точно определить возраст относительно настоящего времени?

Автор: skyboy 27.2.2010, 21:08
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_now + http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-sub

Автор: lumentek 27.2.2010, 23:04
skyboy, не могли бы Вы показать на примере,  что-то не пойму как воспользоваться(

Автор: bars80080 27.2.2010, 23:41
подтверждаю. в этой функции без поллитры не разберёшь

Цитата(lumentek @  27.2.2010,  19:26 Найти цитируемый пост)
имеется поле data - возвраст пользователя.

я так понимаю, что data всё же не возраст, а день рождения. тогда скорее всего так:

Код

SELECT * FROM `table` WHERE `data` <= DATE_SUB(NOW(), INTERVAL 14 YEAR)


Автор: lumentek 28.2.2010, 00:38
>>я так понимаю, что data всё же не возраст, а день рождения
верно!

Вроде получилось.! Только Есть момент. Разве нужно логику <=, а не >= ?
И еще функция DATE_SUB еще и время возвращает, поэтому пришлось добавить DATE_FORMAT - 

Код

SELECT * , DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 0 YEAR ) 
FROM `spid_patients` 
WHERE date_birth >= DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 14 YEAR ) 

такой запрос возвращает записи где дата   например 2008-11-12 

Правильный ли запрос по логике?

Автор: bars80080 28.2.2010, 00:53
Цитата(lumentek @  27.2.2010,  19:26 Найти цитируемый пост)
Мне нужно выбрать всех пользователей, которым меньше или равно 14 лет

ну, логика простая. чтоб день рождения был не далее 14 лет назад. 2008-11-12 вполне подходит


только у тебя почему-то в
Цитата(lumentek @  27.2.2010,  23:38 Найти цитируемый пост)
SELECT * , DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 0 YEAR ) 
FROM `spid_patients` 
WHERE date_birth >= DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 14 YEAR ) 

разные числа после слова INTERVAL

Автор: lumentek 28.2.2010, 01:08
Цитата
 только у тебя почему-то в 
SELECT * , DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 0 YEAR ) 
FROM `spid_patients` 
WHERE date_birth >= DATE_SUB( DATE_FORMAT( NOW( ) , '%Y-%m-%d' ) , INTERVAL 14 YEAR ) 

разные числа после слова INTERVAL

Не совсем понял? В смысле  то  что в селекте стоит значение 0, а в условии 14? Если да, то это я в целях отладки сделал,  чтобы проверять запрос было прощедля меня smile



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)