Я пытаюсь получить предстоящие дни рождения, используя инструкцию mysql и php. Проблема в том, что я видел некоторые решения, но они используют поля даты. К сожалению, моя хранится как временные метки. Приведенный ниже код дает результаты, если дата рождения после 1970 года. Как я могу получить запрос, который даст мне текущий месяц, следующий месяц, месяц после и так далее предстоящих дней рождения? И как я могу заставить его игнорировать год?
$sql_query = " SELECT mem_id, DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%d/%m/%Y') ) FROM profiles WHERE IF ( MONTH( NOW() ) < 12, MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = MONTH( NOW() ) + 1, MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = 1) ORDER BY birthdate";
Я искал этот код, но я не мог найти простой / простой запрос (который также работает с високосными годами (проблема 29 февраля))
Поэтому я сделал свой собственный.
Вот простейший код, чтобы получить предстоящие дни рождения в течение следующих x дней (этот запрос также отображает дни рождения вчерашнего дня (или вы можете изменить его на количество дней в прошлом)
SELECT name, date_of_birty FROM users WHERE DATE(CONCAT(YEAR(CURDATE()), RIGHT(date_of_birty, 6))) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE(), INTERVAL 5 DAY)
$currentMonth = date('n'); // or date('n', strtotime('+1 month')) or whatever $query = "SELECT ... WHERE MONTH(FROM_UNIXTIME(`birthday`)) = $currentMonth";
Обратите внимание, что эти временные метки UNIX являются ужасным выбором для хранения дней рождения:
FROM_UNIXTIME
чтобы сравнить их, что довольно дорого. Вы должны использовать собственные столбцы MySQL DATE
для хранения дат, что позволяет хранить гораздо более широкий диапазон дат и намного эффективнее для запросов.