【问题标题】:MySQL join two tables where date between two datesMySQL连接两个表,其中两个日期之间的日期
【发布时间】:2013-10-01 21:41:56
【问题描述】:

我有一个包含 6 列的表:id (PK, A_I), systemID (varchar(32)), total (varchar(32)), difference (varchar(16)), updated (datetime),错误(整数)。 该表每小时更新一次,现在有超过 200 万条记录。因此,我想将表拆分为仅包含今天值的表和包含历史数据的表。今天表中的每天午夜数据都会移至历史记录。到目前为止一切顺利。

问题是用户可以选择查看日视图、周视图、月视图和年视图中的差异值。我不知道如何将今天表和历史表连接起来,所以它们作为一个。目前周视图的查询是:

SELECT difference FROM productionlog 
WHERE systemID = '$id'
AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd'
ORDER BY updated

如何将今日表和历史表连接起来,达到上述结果?

【问题讨论】:

标签: php mysql join


【解决方案1】:

试试这个查询,

SELECT difference FROM productionlog WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd'
UNION ALL
SELECT difference FROM productionlog_today WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd' ORDER BY updated

另请阅读UNION

【讨论】:

  • 运行查询时出现“UNION 和 ORDER BY 使用不正确”错误。
  • 通过在每个 SELECT 语句周围添加括号来修复错误。一个问题。数据显示不正确。我不知道出了什么问题。
  • 阅读文档将我引向最终结果:“但是,对单个 SELECT 语句使用 ORDER BY 并不意味着行在最终结果中出现的顺序,因为默认情况下 UNION 会产生无序行集。”在最后一次 SELECT 之后,我添加了 ORDER BY 更新。
【解决方案2】:

如上所述,您已经完成了联合,并且您的单独查询按自己的顺序返回结果。您可以将整个查询放入括号中,然后对整体结果进行排序:

SELECT * FROM (
    (SELECT difference, updated FROM productionlog WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd')
UNION ALL
    (SELECT difference, updated FROM productionlog_today WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd' ORDER BY updated)
) as result

ORDER BY result.updated

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多