В настоящее время я работаю на сайте, который должен получить дни рождения друзей, которые отмечают свой день рождения на этой неделе, в этом месяце и в следующем месяце, используя MYSQL и PHP.
Как я могу это сделать?
Если вы храните даты рождения в формате DATE (или DATETIME) в MySQL, вы можете использовать следующие Запросы:
// This week SELECT * FROM person WHERE WEEK( birthdate ) = WEEK( NOW() ) // This month SELECT * FROM person WHERE MONTH( birthdate ) = MONTH( NOW() ) // Next month
SELECT * FROM person WHERE MONTH (дата рождения) = MONTH (NOW ()) + 1;
SELECT * FROM person WHERE IF ( MONTH( NOW() ) < 12, MONTH( birthdate ) = MONTH( NOW() ) + 1, MONTH( birthdate ) = 1)
SELECT * FROM users WHERE birthday + INTERVAL YEAR(CURRENT_DATE) - YEAR(birthday) YEAR BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 3 DAY
Обратите внимание, что это условие не поддается движению и требует полного сканирования indes.
В SQL Server
, Oracle
и PostgreSQL
это можно улучшить с помощью этого подхода:
, но MySQL
не имеет возможности генерировать случайный набор результатов.
Однако вы можете создать фиктивную таблицу и хранить годы с 1900
по 2100
в ней.
Добавьте задачу cron, чтобы обновить ее в 2100
так как вы можете легко забыть 🙂