Intereting Posts
сохранить текст в формате html в базе данных Загрузка не работает правильно, если файл слишком большой Неустранимая ошибка при вызове хранимой функции MySQL из PHP с использованием MySQLi codeigniter – использование помощника в контроллере не работает загрузить файл через ajax Какие хорошие PHP-профилиры можно использовать? отправка формы, когда установлен флажок Показывать всплывающее окно при закрытии браузера Mysql: перемещение конкретных записей поверх результирующего массива рядом с ORDER BY Проверка относительных абсолютных путей / URL-адресов в PHP Примеры параметризованных запросов Каковы пределы функций множественного завивания PHP? error_get_last () возвращает NULL в PHP 7, когда установлен специальный обработчик исключений Вставка Codeigniter, если не существует, и обновлять, если нет Проведите массив рекурсивно и напечатайте путь ходьбы

Получите предстоящие дни рождения Mysql и PHP

Я пытаюсь получить предстоящие дни рождения, используя инструкцию 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"; 

Solutions Collecting From Web of "Получите предстоящие дни рождения Mysql и PHP"

Я искал этот код, но я не мог найти простой / простой запрос (который также работает с високосными годами (проблема 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 являются ужасным выбором для хранения дней рождения:

  • Они не могут хранить даты до 1970 года (если вы не используете отрицательные числа, которые могут работать не везде).
  • Чтобы запросить их в базе данных, вам необходимо преобразовать все записи FROM_UNIXTIME чтобы сравнить их, что довольно дорого.

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