(PHP) Извлечение правильной даты рождения при поиске возраста в базе данных - PullRequest
1 голос
/ 18 февраля 2011

В моей базе данных есть поле с установленной датой рождения (например, 1989.08.10 (ГГГГ.ММ.ДД)). У меня также есть функция, которая преобразует эту информацию в правильный год (например, 17, 22, 30 лет). В поисковой системе, которую я делаю, у меня есть запрос, построенный из различных входных данных, которые требуются пользователю, в то время как два из них - это возраст, MIN и MAX. Например, выберите возраст 18-25 лет.

Моя проблема в том, что я не уверен, как мне получить готовые результаты, так как я не представляю, как добавить его в запрос. Я предполагаю, что мне придется как-то сделать два цикла WHILE, которые бы выглядели так для конечного результата:

while($row = mysql_fetch_array($query){
$age = convertFunc($row['birthdate']);
while(XXXXX){
SOME CODE HERE
}
}

Я совершенно заблудился, но уточню. Именно то, что я хочу, выглядит примерно так в поисковом запросе к базе данных: SELECT * FROM users WHERE user = '$name' AND fromAge >= 18 AND toAge <= 25

При этом будут выбраны все поля, соответствующие возрасту MIN и MAX.

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

попробуйте что-то вроде.

select * from users where datediff(birthdate,now()) between date_add(now(),interval -15 years) and date_add(now(),interval -25 years)
0 голосов
/ 18 февраля 2011

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

Вы можете попробовать что-то подобное с текущей настройкой, чтобы найтивсе люди между 18-25:

$age1 = 18; //These two would be external inputs from whatever search form
$age2 = 25;

$date1 = date("Y.M.d",time() - ($age1 * 365 * 24 * 60 * 60));//Subtract the number of seconds equivalent to X years from current timestamp, Convert timestamps to appropriate dates for the format in the DB
$date2 = date("Y.M.d",time() - ($age2 * 365 * 24 * 60 * 60));//Strtotime("18 years ago") might work, not sure

$sql = mysql_query("SELECT * FROM `users` WHERE `birthdate` >= '$date1' AND `birthdate` <= '$date2'");
$result = mysql_fetch_assoc($sql);
0 голосов
/ 18 февраля 2011

В зависимости от структуры вашей базы данных, вы можете использовать DATEDIFF в своем выражении SQL. Ссылка для справки

...