Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте подскажите пожалуста почему не работают такие запросы:
SELECT * FROM `table` WHERE `data` = 'WEEK(CURDATE(),1)' LIMIT 0 , 30 текущая неделя
SELECT * FROM `table` WHERE `data` = 'WEEK (CURDATE(),1) - INTERVAL 1 WEEK' LIMIT 0 , 30 предыдущая неделя
Нужно вывести информацию за текущую/предыдущюю неделю
Тип данных `data` date
Версии mysql на которых проверял:
MySQL 3.23.53
MySQL 5.0.70
Неактивен
Потому, что 'WEEK(CURDATE(),1)' - это строка, и вы пытаетесь сравнить её со значением типа date.
P.S. Если вы уберете кавычки, то WEEK(CURDATE(),1) - будет числом. Соответственно, это тоже некорректное значение для типа date.
Неактивен
То что там есть лишние кавычки я видел, убирал, это синтаксическая ошибка.
Тогда так:
SELECT * FROM `table` WHERE WEEK (`data`,1) = WEEK(CURDATE(),1) LIMIT 0 , 30 текущая неделя
SELECT * FROM `table` WHERE WEEK (`data`,1) = WEEK (CURDATE(),1) - INTERVAL 1 WEEK LIMIT 0 , 30 предыдущая.
Таким образом мы сравниваем числа недель.
Текущую неделю я вывожу а как вывести предыдущюю, данный подход возвращает NULL
Отредактированно victort (27.10.2009 18:01:51)
Неактивен
Синтаксическая ошибка из-за пробелов между WEEK и (. Аккуратнее пишите
Ну и, конечно, оно не будет использовать индексы.
Неактивен
SELECT * FROM `table` WHERE WEEK(`date`,1) = WEEK(CURDATE(),1) - INTERVAL 1 WEEK
Все пробелы я убрал всеравно предыдущую неделю не выводит.
Данное поле не проиндексованно, в чем еще ошибка.
Неактивен
У вас опять таже ошибка, что и в первом сообщении - некорректное сравнение типов данных. Вы из числа WEEK(CURDATE(),1) пытаетесь вычесть временной интервал INTERVAL 1 WEEK.
Нужно:
WEEK(CURDATE() - INTERVAL 1 WEEK);
или, что тоже самое
WEEK(CURDATE())-1 -- правда данный вариант будет неправильно работать в первую неделю года
Неактивен
victort написал:
Данное поле не проиндексованно, в чем еще ошибка.
Наличие индекса не приведет к ошибке. Речь идет о том, что если у вас есть индекс на поле `data`, то в данном выражении SELECT он не будет использован, что приведет к медленной работе при больших объемах таблицы.
Неактивен
SELECT * FROM `table` WHERE WEEK(`date`,1) = WEEK(CURDATE(),1) - 1
WEEK(CURDATE())-1 -- правда данный вариант будет неправильно работать в первую неделю года написал:
Потомучто первая неделя я так понимаю будет равна нулю при сравнении.
А если написать:
SELECT * FROM `table` WHERE IFNULL ( WEEK(`date`,1) = WEEK(CURDATE(),1) - 1, WEEK(`date`,1)=53 AND YEAR(`date`)=YEAR(CURDATE())-1 )
Должно получится если условие не равно 0 то текущий год, если ноль то последняя неделя, она 53 плюс к этому вычисляем предыдущий год и сравниваем. Скорей всего я написал не правильно, но выложил идею решения задачи, поправте пожалуста.
Неактивен