Я пытаюсь получить данные из диапазона дат и где площадь офиса равна office->id area
. Вот мой запрос
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE d.ID_Area = 1 OR d.ID_Area = 6
AND d.date BETWEEN '2018-09-01' AND '2018-09-30'
ORDER BY d.date DESC
Проблема в том, что я получаю данные с датой 2018-01-01
, потому что первое, где. Как я могу получить только данные из области 1
и 6
из этого диапазона дат
Вам нужно разделить где условия WHERE ( d.ID_Area = 1 OR d.ID_Area = 6 ) AND (d.date BETWEEN '2018-09-01' AND '2018-09-30')
Просто нужны скобки:
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE (d.ID_Area = 1 OR d.ID_Area = 6)
AND d.date BETWEEN '2018-09-01' AND '2018-09-30'
ORDER BY d.date DESC
Если у вас хватит фантазии, вы даже можете использовать синтаксис IN ()
:
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE d.ID_Area IN (1, 6)
AND d.date BETWEEN '2018-09-01' AND '2018-09-30'
ORDER BY d.date DESC
используйте in
вместо OR
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE d.ID_Area (1,6)
AND d.date BETWEEN '2018-09-01' AND '2018-09-30'
ORDER BY d.date DESC
Или используйте круглые скобки
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE (d.ID_Area = 1 OR d.ID_Area = 6)
AND d.date BETWEEN '2018-09-01' AND '2018-09-30'
ORDER BY d.date DESC
Вам нужно добавить несколько круглых скобок, чтобы отсортировать логику:
SELECT * FROM office as d
LEFT JOIN office_area as e ON e.ID_Area = d.ID_Area
WHERE (d.ID_Area = 1 OR d.ID_Area = 6)
AND (d.date BETWEEN '2018-09-01' AND '2018-09-30')
ORDER BY d.date DESC
MySQL или Sql-сервер?