2016-01-25 3 views
0

Я хочу отобразить результаты поиска, запрошенные на основе условия, когда значение from_date сегодня или выше, а также to_date до сегодняшнего дня, если это существует в диапазоне.Запрос данных на основе даты - Mysql

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

SELECT * 
FROM device b LEFT OUTER JOIN device_model a 
    ON (b.`model_ID`=a.`model_ID`) 
LEFT JOIN sub_product_area c 
    ON (b.sub_Product_Area_ID = c.sub_Product_Area_ID) 
LEFT JOIN borrow_device d 
    ON (b.device_ID = d.device_ID AND (from_Date >= CURDATE() or CURDATE() <= to_date)) 
WHERE (a.`name`LIKE '%galaxy%') OR (a.platform LIKE 'galaxy%') OR 
    (a.`type`LIKE '%galaxy%') OR (a.`OS`LIKE '%galaxy%') OR (d.username LIKE '%galaxy%') OR 
    (c.`sub_Product_Area_name` LIKE '%galaxy%') 
ORDER BY d.`transaction_Mode` DESC 

Мои структуры таблицы здесь:

enter image description here

Проблема заключается в том, что не показывает результаты, где следующий пункт после того, как «ИЛИ» получает правда. Что-то не так с моим запросом?

+0

Ваше состояние даты не имеет для меня смысла. Могли бы вы продемонстрировать, в качестве примера, какие типы записей вы хотите сохранить на основе своих 'from_date' и' to_date'? –

+0

Я хочу показать результаты, где from_date> = сегодня ИЛИ to_date> = сегодня. Вот где date_date сегодня или вверх дата OR to_date сегодня или в будущем. Надеюсь, что это достаточно ясно. – Nez

+0

Почему значение from_date никогда не будет равным нулю? И подумайте о предоставлении правильных инструкций CREATE и INSERT и желаемого результата. – Strawberry

ответ

0

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

SELECT * 
FROM device b LEFT OUTER JOIN device_model a 
    ON (b.`model_ID`=a.`model_ID`) 
LEFT JOIN sub_product_area c 
    ON (b.sub_Product_Area_ID = c.sub_Product_Area_ID) 
LEFT JOIN borrow_device d 
    ON b.device_ID = d.device_ID 
WHERE (from_Date >= CURDATE() or CURDATE() <= to_date) AND ((a.`name`LIKE '%galaxy%') OR (a.platform LIKE 'galaxy%') OR 
    (a.`type`LIKE '%galaxy%') OR (a.`OS`LIKE '%galaxy%') OR (d.username LIKE '%galaxy%') OR 
    (c.`sub_Product_Area_name` LIKE '%galaxy%')) 
ORDER BY d.`transaction_Mode` DESC 
0

Нужно исправить это один и попробовать:

LEFT JOIN borrow_device d 
    ON (b.device_ID = d.device_ID AND (from_Date >= CURDATE() or CURDATE() <= to_date)) 

К:

LEFT JOIN borrow_device d 
    ON (b.device_ID = d.device_ID AND (from_Date >= CURDATE() or to_date >= CURDATE())) 
0

1) Я видел условие для a.platform как "(a.platform LIKE 'galaxy%')", а не как "(a.platform LIKE '**% ** galaxy%')" (т. «%» для «галактики%», как и другие части предложения where.)

2) Если значение 'to_date' может быть пустым, попробуйте добавить условие для проверки нулей в условии соединения, т.е. (или to_date имеет значение null или. ..)

3) Рассмотрите имена полей обертывания символом «` ».

4) Вы пробовали свой запрос без каких-либо предложений?

Надеюсь, он сработает для вас.

Смежные вопросы