2008-11-24 8 views
1

настоящего время я использую следующий SQL для получения последних семь дней стоят записей из таблицы:PHP/MySQL: Получение последней * полная * недели записи

purchased >= date_sub(now() ,interval 7 day) 

Однако, мне нужно изменить поэтому он получает последние полные недельные записи (полночь с субботы до полуночи в субботу). Таким образом, в течение всей недели результаты не меняются, но когда кто-то посещает в воскресенье утром, они будут обновлены.

Я просто не могу понять, как работать в дни и т. Д. Кроме того, есть ли встроенные функции MySQL для этого?

Надеюсь, я объяснил это достаточно ясно. Это приложение PHP.

ответ

2

см. Функцию MySQL YEARWEEK().

Так что вы могли бы сделать что-то вроде

SELECT * FROM table WHERE YEARWEEK(purchased) = YEARWEEK(NOW()); 

Вы можете изменить день начала недели с помощью второго параметра режима

Что может быть лучше, однако каким-то образом рассчитать дату «последнего воскресенье в 00:00 ', а затем базе данных не нужно было бы запускать функцию для каждой строки, но я не мог видеть очевидный способ сделать это в MySQL. Вы могли бы, однако легко генерировать это в PHP и сделать что-то вроде

$sunday = date(('Y-m-d H:i:s'), strtotime('last sunday 00:00')); 
$sql = "SELECT * FROM table WHERE purchased >= '$sunday'"; 
0

MySQL имеет функцию WEEK(), которая позволяет вам получать числовую неделю года с даты. Вы можете получить (неделю сегодняшнего дня) -1 и сравнить это с неделей ваших записей, на которые вы фильтруете.

+0

Вы должны проверить год, в противном случае вы можете получить записи из одной и той же недели, но год назад – 2008-11-24 12:03:47

+0

Хороший вопрос, моя ошибка. – acrosman 2008-11-24 12:28:07