2017-01-07 3 views
0

У меня есть запрос, который должен выбрать все заказы между датамиPHP выбрать все заказы, и между определенными датами

SELECT t1.*, treatment.treatmentName, 
t2.userForename, t2.userSurname, 
t3.userForename as clientForename, t3.userSurname as clientSurname, t3.userPost as clientPost, t3.userAd1 as clientAd1, 
t4.userForename as createdForename, t4.userSurname as createdSurname 
      FROM booking t1 
      INNER JOIN treatment ON t1.idtreatment = treatment.idtreatment 
      INNER JOIN user t2 ON t2.iduser = t1.idstylist 
      INNER JOIN user t3 ON t3.iduser = t1.iduser 
      INNER JOIN user t4 ON t4.iduser = t1.bookingCreatedBy 
      WHERE 
      t1.bookingDate>=%s AND t1.bookingDate<=%s) 
      ORDER BY t1.bookingDate ASC, t1.bookingSTime ASC, t1.idtreatment ASC 

Если я передаю запрос начальную и конечную дату, как так ....

SELECT t1.*, treatment.treatmentName, 
t2.userForename, t2.userSurname, 
t3.userForename as clientForename, t3.userSurname as clientSurname, t3.userPost as clientPost, t3.userAd1 as clientAd1, 
t4.userForename as createdForename, t4.userSurname as createdSurname 
FROM booking t1 
INNER JOIN treatment ON t1.idtreatment = treatment.idtreatment 
INNER JOIN user t2 ON t2.iduser = t1.idstylist 
INNER JOIN user t3 ON t3.iduser = t1.iduser 
INNER JOIN user t4 ON t4.iduser = t1.bookingCreatedBy 
WHERE t1.bookingDate>='2017-01-01' AND t1.bookingDate<='2017-01-07' 
ORDER BY t1.bookingDate ASC, t1.bookingSTime ASC, t1.idtreatment ASC 

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

07/09/2016, 07/09/2016, 26/09/2016, 07/09/2016, 07/09/2016, 05/01/2017, 07/09/2016, 20/09/2016, 07/09/2016

как вы можете видеть theres только на самом деле тот, который прямо в моем массиве, который вернулся.

+0

ли 'bookingDate' дату или столбец DATETIME? – RiggsFolly

+0

@RiggsFolly это столбец даты –

+0

Хорошо, так какой столбец даты вы показываете, когда вы показываете эти даты. – RiggsFolly

ответ

1

Просто мысли, какой столбец даты вы отображение, когда вы говорите, что дата не права?

Убедитесь, что t1.bookingDate

+0

Да, спасибо. Очевидно, это слишком долго смотрелось. Я отобразил совершенно другое поле даты из моего результирующего набора. Спасибо –

-1

Вы можете попробовать заменить WHERE t1.bookingDate> =% s и t1.bookingDate < =% s , где t1.bookingDate между% с и% s

0

Это слишком долго для комментария. Ваш запрос «шаблон» выглядит так:

 WHERE t1.bookingDate>=%s AND t1.bookingDate<=%s) 
-------------------------------------------------------^ 

Закрывающий параграф является синтаксической ошибкой. Таким образом, вы не должны получать никаких результатов.

Запроса, который вы утверждаете, что бег является:

WHERE t1.bookingDate>='2017-01-01' AND t1.bookingDate<='2017-01-07' 

Закрывающей скобка таинственным образом исчезла.

Для этого типа проблемы первое предположение - это типы данных. Однако вы говорите, что дата действительно дата. Вторая возможность - это дополнительные предложения в WHERE. Если у вас есть OR, вы получите неожиданные результаты. Таким образом, заключите это полностью в скобках:

 WHERE (t1.bookingDate >= %s AND t1.bookingDate <= %s) 
Смежные вопросы