Мені потрібно отримати дані з таблиці на основічас і дата, тобто мені потрібно отримати дані з 5:00 вечора до поточного дня до 17:00. Я спробував наступний код, в якому я отримав вчора і сьогодні, але з часом це не допомагає вирішити цю проблему Примітка: стовпець змінився в мітку
SELECT *
FROM `mdl_forum_posts`
WHERE from_unixtime(modified, "%Y-%m-%d") = CURDATE()
OR from_unixtime(modified, "%Y-%m-%d") = date(CURDATE()-1)
Відповіді:
1 для відповіді № 1SELECT * FROM `mdl_forum_posts`
WHERE modified BETWEEN UNIX_TIMESTAMP(
CONCAT(DATE_FORMAT(CURDATE()- INTERVAL 1 DAY, "%Y-%m-%d"), " 17:00:00"))
AND UNIX_TIMESTAMP(
CONCAT(CURDATE(), " 17:00:00"));
Зауважте, що CURDATE () є поліморфний; DATE_FORMAT необхідний для першого предиката, де розрахунок приводить до типу типу, що повертається як ціле.
Атрибути обгортання у функції всерединіпредикати відключають використання індексів - застосування зворотної функції до літерала дозволяє використовувати для використання індексів (і навіть за відсутності індексів буде швидше, оскільки функція повинна бути тільки evaulated один раз).
0 для відповіді № 2
якщо дата 1 місяця CURDATE () - INTERVAL 1 DAY дає точну дату попереднього дня
SELECT * FROM `mdl_forum_posts`
WHERE modified BETWEEN UNIX_TIMESTAMP(
CONCAT(CURDATE() - INTERVAL 1 DAY, "%Y-%m-%d"), " 17:00:00"))
AND UNIX_TIMESTAMP(
CONCAT(CURDATE(), " 17:00:00"));