MySQL: как выбрать записи на этой неделе?

Добрый день.

У меня есть таблица temp со структурой на sqlfiddle:

id(int 11 primary key)
name(varchar 100)
name2(varchar 100)
date(datetime)

Я хотел бы получить запись на этой неделе, например, если теперь 21.11.2013 мне бы хотелось, чтобы все строки с 18.11.2013 по 24.11.2013 (в неделю)

Теперь я вижу следующий алгоритм:

1) obtain weekday
2) calculate how many days ago was Monday
3) calculate the date Monday
4) calculate future date Sunday
5) make a request on date

Скажите, пожалуйста, существует более короткий алгоритм (желательно в запросе MySQL)?

ADD Вопрос: почему запрос выберите запись на дату 17.11.2013 ( Воскресенье) - 23.11.2013 (суббота) и как получать записи на дату 18.11.2013 (понедельник) - 24.11.2013 (воскресенье)?

запрос:

select * from temp
where yearweek(`date`) = yearweek(curdate())

Спасибо!

Ответы

Ответ 1

Используйте YEARWEEK():

SELECT *
FROM   your_table
WHERE  YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1)

Ответ 2

SELECT id, name, date
FROM table
WHERE YEARWEEK(date)=YEARWEEK(NOW());

Ответ 3

Для выбора записей дня, недели и месяца используйте этот способ:

function my_func($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  your_table WHERE ".$timeSQL
return $Result = $this->db->query($Sql)->result_array();
}

Ответ 4

Вы можете сделать это, следуя методу

SELECT DATE_FORMAT("2017-06-15", "%U");

Получить количество недель (от 00 до 53) Где (воскресенье 1-й день и понедельник последний день недели)

Может быть полезно для вас.

Пример:

SELECT DISTINCT DATE_FORMAT('dates', '%U') AS weekdays FROM table_name;