Выберите записи с сегодняшнего дня, на этой неделе, в этом месяце php mysql

Я предполагаю, что это довольно просто, но не могу понять. Я пытаюсь сделать несколько страниц, которые будут содержать результаты, отобранные из таблицы mysql db на сегодня, на этой неделе и в этом месяце. Даты вводятся, когда запись создается с date('Ymd H:i:s'); , Вот что я до сих пор:

день, где дата> (дата- (60 * 60 * 24))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC" 

неделя, где дата> (дата- (60 * 60 * 24 * 7))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC" 

месяц (30 дней), где дата> (дата- (60 * 60 * 24 * 30))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC" 

Любые идеи будут высоко оценены. Благодаря!

Related of "Выберите записи с сегодняшнего дня, на этой неделе, в этом месяце php mysql"

Предполагая, что столбец даты является фактическим столбцом даты MySQL:

 SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC; 

Попробуйте использовать функции даты и времени (MONTH (), YEAR (), DAY (), руководство по MySQL )

На этой неделе:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW()); 

На прошлой неделе:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1; 

Текущий месяц:

 SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW()); 

Текущая неделя:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW()); 

Сегодня:

 SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW()); 

Это будет выбирать только текущий месяц, действительно неделю и действительно только сегодня 🙂

Ответ Натана даст вам анекдоты за последние 24, 168 и 744 часа, а не шутки с сегодняшнего дня, на этой неделе, в этом месяце. Если это то, что вы хотите, здорово, но я думаю, что вы можете искать что-то другое.

Используя его код, в полдень вы получите шутки, которые начинаются вчера в полдень, и заканчиваются сегодня в полдень. Если вы действительно хотите шутить сегодня, попробуйте следующее:

 SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC; 

Вам нужно будет сделать что-то немного отличное от текущей недели, месяца и т. Д., Но вы получите эту идею.

Кажется, все считают, что дата является столбиком в таблице.
Я не думаю, что это хорошая практика. Слово date может быть просто ключевым словом на некотором языке кодирования (возможно, Oracle), поэтому, пожалуйста, измените дату имени столбца, возможно, JDate.
Так будет работать следующая работа:

 SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC; 

Итак, у нас есть таблица под названием Jokes с колонками JScore и JDate.

Лучшим решением для «сегодняшнего дня» является:

 SELECT * FROM jokes WHERE DATE(date) = DATE(NOW()) 

Ответ Натана очень близок, но он вернет плавающий результирующий набор. По мере сдвига во времени записи будут отплывать и на результирующий набор. Использование функции DATE() в NOW() приведет к стиранию элемента времени с даты создания статического набора результатов. Поскольку функция date() применяется к now() вместо фактической производительности столбца date должна быть выше, поскольку применение функции, такой как date() к столбцу даты запрещает использование MySql индекса.

Чтобы сохранить статичное использование результата:

 SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) ORDER BY score DESC; 

Ну, это решение поможет вам выбрать только текущий месяц, текущую неделю и только сегодня

 SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC; 

За неделю добавлены сообщения:

 WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW()) 

За месяц добавлены сообщения:

 MONTH(addedon_gm) = MONTH(NOW()) 

За год добавленные сообщения:

 YEAR(addedon_gm) = YEAR(NOW()) 

вы получите точные результаты, где показываются только игры, добавленные сегодня, иначе вы можете отобразить: «Нет новых игр, найденных на сегодняшний день». Использование набора записей ShowIF – это пустая транзакция.

Я думаю, что использование функции NOW() неверно для получения разницы во времени. Потому что функция NOW() выполняется каждый раз, когда вы вычисляете последние 24 часа. CURDATE() этого вы должны использовать CURDATE() .

  function your_function($time, $your_date) { if ($time == 'today') { $timeSQL = ' Date($your_date)= CURDATE()'; } if ($time == 'week') { $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())'; } if ($time == 'month') { $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())'; } $Sql = "SELECT * FROM jokes WHERE ".$timeSQL return $Result = $this->db->query($Sql)->result_array(); }