2016-01-25 121 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> = today或to_date> = today的结果。这是from_date是今天或更新日期或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)) 

TO:

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

1)我看过了(a.platform LIKE'galaxy%')“,而不是”(a.platform LIKE'**%** galaxy%')“。如果'to_date'可能为空,尝试添加一个条件来检查连接条件为空(即to_date为空或。)。如果'to_date'可能为空,则尝试添加条件以检查连接条件中的空值(或to_date为空或。 ..)

3)考虑用字符“`”包装字段名称。

4)你有没有试过你的查询没有where子句?

希望它适合你。