Как лучше всего выбрать из таблицы только те строки, которые были созданы за последние 7 дней?
В MySQL есть десятки функций времени и даты, и я немного не понимаю, как проще всего это сделать.
Ради этого вопроса предположим, что у вас есть таблица с именем "my_table", и она содержит строку "created_at", которая является DATETIME.
SELECT * FROM my_table WHERE ...
Что бы вы заполнили предложением WHERE?
Ответ 1 · рейтинг 14 · Drew
WHERE DATEDIFF(NOW(), created_at) <= 7;
Мне это нравится, потому что оно гласит: "Разница в дате между текущим моментом и временем его создания составляет не более 7 (дней)". в моей собственной голове
Ответ 2 · рейтинг 12 · T.J. Crowder
...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY)
Это мой предпочтительный способ, потому что он такой... понятный. Но ADDDATE тоже подойдет (и вы также можете использовать форму INTERVAL для ясности; по умолчанию это дни, поэтому вы видите, что люди опускают ее). Вы не хотите выполнять вычисление created_at и сравнивать его с now(), потому что для этого требуется вычисление created_at в каждой строке (при условии, что MySQL не оптимизирует его), в то время как изменение now() и сравнение с немодифицированный created_at означает, что MySQL выполняет этот бит один раз и использует результат при сравнении со строками, не говоря уже об индексах.