【问题标题】:Querying data based on the date - Mysql根据日期查询数据 - Mysql
【发布时间】:2016-01-25 06:45:24
【问题描述】:

我想显示根据 from_date 是今天或以上的条件查询的搜索结果,如果该范围内存在 to_date 到今天为止。

我的查询如下:

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

我的表结构在这里:

问题是它不显示'OR' 之后的下一个子句为真的结果。我的查询有什么问题吗?

【问题讨论】:

  • 您的日期条件对我来说没有意义。您能否举例说明您希望根据from_dateto_date 保留哪些类型的记录?
  • 我想显示 from_date >= today OR to_date >= today 的结果。这就是 from_date 是今天或向上日期或 to_date 是今天或未来日期的地方。希望这足够清楚
  • 为什么 from_date 会为空?并考虑提供适当的 CREATE 和 INSERT 语句以及所需的结果。

标签: mysql date


【解决方案1】:

你把你的条件放在连接子句中,你应该把它变成:

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

【讨论】:

    【解决方案2】:

    需要纠正这个并尝试:

    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()))
    

    【讨论】:

      【解决方案3】:

      1) 我看到 a.platform 的条件为“(a.platform LIKE 'galaxy%')”而不是“(a.platform LIKE '**%**galaxy%')”(即' %' 代表 'galaxy%' 部分,就像 where 子句的其他部分一样。)

      2) 如果 'to_date' 可能为空,请尝试添加一个条件来检查连接条件中的空值,即(或to_date 为空或...)

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

      4) 您是否尝试过不使用 where 子句的查询?

      希望它对你有用。

      【讨论】:

        猜你喜欢
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2014-07-07
        • 1970-01-01
        相关资源
        最近更新 更多