Что выводит эта функция MySQL, когда написано так? - PullRequest
1 голос
/ 07 октября 2011

Я заказал проект у разработчика и пытаюсь исправить обнаруженные ошибки.

Одним из них является запрос MySQL с функцией DATE_FORMAT (), который выполняет запросничего не возвращать.

SELECT * FROM food_cart 
WHERE cart_userId='3' 
AND cart_itemId='8' 
AND date_format(cart_date,'%Y-%m-%d %H')='".date("Y-m-d")."'

Код выглядит правильно отформатированным, так как он не возвращает ошибку при выполнении в phpMyAdmin.Однако он ничего не возвращает.

Таблица выглядит следующим образом:

enter image description here

Я думаю, что она должна пытаться смотреть только на дату (т.е.2011-10-07) и не точное время, так как оно не актуально для запроса.Я только начинающий в MySQL, и я не совсем уверен, что я здесь делаю.

Любая помощь приветствуется!

Майк.

Ответы [ 5 ]

1 голос
/ 07 октября 2011

MySQL не нуждается в переводе даты для своих собственных полей.
Просто убедитесь, что вы вводите свой параметр в формате yyyy-mm-dd.

$date = date('Y-m-d',$adate);

$query = "SELECT * FROM food_cart 
WHERE cart_userId = '3' 
  AND cart_itemId = '8' 
  AND cart_date BETWEEN '$date' AND DATE_ADD('$date', interval 1 day) 
  -- and car_date <> DATE_ADD('$date', interval 1 day)

Если вы выполняете этот запрос день ото дня, раскомментируйте последнюю часть, чтобы устранить 1-секундное перекрытие, которое есть в «все включено» МЕЖДУ. Это предотвратит ложные дубликаты.

0 голосов
/ 08 октября 2011

По запросу, вот моя версия Ответ Йохана :

$date = date( "Y-m-d", $timestamp );
$sql = "SELECT * FROM food_cart
        WHERE cart_userId = '3' 
          AND cart_itemId = '8' 
          AND cart_date >= '$date'
          AND cart_date < '$date' + INTERVAL 1 DAY"; 

Этот запрос будет

  • полностью использовать индекс для cart_date,
  • полностью использует кэш запросов, а
  • возвращает именно те строки, для которых часть даты в cart_date равна $date.
0 голосов
/ 07 октября 2011

Изменить эту строку:

date_format(cart_date,'%Y-%m-%d %H')='".date("Y-m-d")."'

Это приведет к следующему (что никогда не будет правильным):

'2011-10-07 16' = '2011-10-07'

Вместо этого

 date( cart_date )='".date("Y-m-d")."'

Если вы сравниваете даты, убедитесь, что обе стороны уравнения имеют одинаковый уровень точности.

Редактировать: вот полный очищенный код PHP:

$date = date( 'Y-m-d' );
$sql = 'SELECT * '
     . 'FROM food_cart '
     . 'WHERE cart_userId = 3 '
     . '  AND cart_itemId = 8 ' 
     . "  AND date( cart_date ) = '$date'";

Он должен сгенерировать оператор типа SELECT ... FROM ... WHERE ... AND date( cart_date ) = '2011-07-10', который будет правильно обрабатывать фильтрацию даты.

0 голосов
/ 07 октября 2011

Когда date("Y-m-d") передается на запрос, он принимает 00:00:00 для часов, минут, секунд.Вот почему он ничего не возвращает.вам может потребоваться выполнить поиск по диапазону, чтобы получить с полуночи до 11:59:59 той же даты.

0 голосов
/ 07 октября 2011

вы можете использовать функцию date () вместо.http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

...