Код (Text): <?php $result = mysql_query("SELECT * FROM main_table ORDER by born_date"); $myrow = mysql_fetch_array ($result); $i=0; function dateconv($date) { $exp = explode ("-", $date); $result = $exp[2].".".$exp[1].".".$exp[0]; return $result; } function calculate_age($birthday) { $birthday_timestamp = strtotime($birthday); $age = date('Y') - date('Y', $birthday_timestamp); if (date('Y', $birthday_timestamp) > date('Y')) { $age--; } return $age; } do { printf ("<tr> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td></tr>", $myrow['name'], $myrow['new_job'], dateconv($myrow['born_date']), calculate_age($myrow['born_date'])); } while ($myrow = mysql_fetch_array ($result)); ?> Пишу как выше выводятся все Буду благодарен любой помощи.
Попов детектед По теме: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff
PHP: <?php $result = mysql_query("SELECT * FROM main_table ORDER by born_date"); $myrow = mysql_fetch_array ($result); function dateconv($date) { $exp = explode ("-", $date); $result = $exp[2].".".$exp[1].".".$exp[0]; return $result; } function calculate_age($birthday) { $birthday_timestamp = strtotime($birthday); $age = date('Y') - date('Y', $birthday_timestamp); if (date('Y', $birthday_timestamp) > date('Y')) { $age--; } return $age; } do { printf ("<tr> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td></tr>", $myrow['name'], $myrow['new_job'], dateconv($myrow['born_date']), calculate_age($myrow['born_date'])); } while ($myrow = mysql_fetch_array ($result)); ?> Пишу как выше выводятся Олег-28 Сергей-39 Эльдар-50 Алла-58 Керил-55 Анна-60 Тимур-47 Но надо вывести из выше указанных только: Эльдар-50 Керил-55 Анна-60 Если есть возможность помогите подправить запрос или код Буду благодарен любой помощи. --- Добавлено --- Спасибо, пока не получается (
Код (Text): SELECT *, YEAR(CURDATE()) - YEAR(born_date) as age FROM main_table WHERE YEAR(CURDATE()) - YEAR(born_date) IN(50, 55, 60) ORDER by born_date
Ну и прекрасно, если уже получилось! На всякий случай, напишу как бы я решал такую задачу: Вся фишка в том, что подразумевается будущее время: кому исполняется, а не кому уже есть. 1. Отказаться от помощи PHP. Это, лять, неуклюже и смешно выкачивать все данные и фильтровать на стороне PHP. Вместо этого надо сочинить выражение на SQL для вычисления "возраст человека с датой рождения такой-то на дату такую-то". 2. Сочинить выражение на SQL, дающее дату "будущего Нового Года". 3. Использовать выражение "возраст" в условии-фильтре "те, кому на указанную дату X лет". Ну или "чей возраст на указанную дату IN(X, Y, Z)". Нам понадобится применить #3 дважды к каждому человеку. Нас интересуют только те, кому сейчас X-1, а на новый год будет X. Сейчас сентябрь.Тот, кому уже 50, нам не подойдёт. А вот если сейчас ему 49, а на 1-го января следующего года ему 50, то он наш клиент! Псевдокод: Код (SQL): SELECT * FROM users WHERE возраст(users.birthday, NOW()) IN(39, 44, 49, 54, 59) AND возраст(users.birthday, будущийновыйгод()) IN(40, 45, 50, 55, 60) --- Добавлено --- Добавлю ещё https://dev.mysql.com/doc/mysql-tutorial-excerpt/5.7/en/date-calculations.html
Я взял таблицу домашних любимцев из ссылки выше и поиграл с ней. Данные таковы, что по состоянию на 2019-09-06 в текущем году днюха будет у Chirpy 1998-09-11 и у Whistler 1997-12-09 И допустим меня интересуют те кому исполнится 21: https://www.db-fiddle.com/f/wg2NjibAmj2TSRMSpZ39Lw/0 --- Добавлено ---