php - PHP:将这两个 SQL 查询合二为一
问题描述
我使用 MariaDB 并有一个表格,其中每一行都有一个日期和一个分数。
我想首先显示日期为 3 天或更新的行,按分数排序 - 然后显示其余的(超过 3 天)按日期排序。
由于我的日期存储在 unix 时间中,因此很容易让 php 从现在开始计算 3 天,并将其用作下面的 $scoreTimeLimit 变量:
这是我的两个查询:
SELECT * FROM myTable WHERE myDate > $scoreTimeLimit ORDER BY myPopularityScore DESC
SELECT * FROM myTable WHERE myDate < $scoreTimeLimit ORDER BY myDate DESC
但是,我非常希望只有 1 个查询而不是两个。能做到吗……?
解决方案
这是 UNION 的工作。
SELECT * FROM (
SELECT 0 ord1, NOW() as ord2, *
FROM myTable WHERE myDate > NOW() - INTERVAL 3 DAY
UNION ALL
SELECT 1 ord1, myDate as ord2, *
FROM myTable WHERE myDate <= NOW() - INTERVAL 3 DAY
) a
ORDER BY ord1, ord2 DESC, myPopularityScore
内部查询为您提供了一个结果集,其中添加了几个额外的列,以帮助您管理排序。
推荐阅读
- python - 无法从 python 执行两个 SQL 表的内连接,出现通信链接错误/连接写入错误
- python-3.x - valueError:时间数据“2021-02-01T04:10:39.669Z”与格式“%Y-%m-%dT%M:%H:%S%f%z”不匹配
- firebase - 使用颤振将不超过 2 个图像存储在 Firebase 中
- angular - Angular - 在表格列上按回车键自动启动按钮单击
- c# - 以紧凑的方式迭代两个列表
- flutter - 为什么不能为 ListView 加载更多数据
- html - 尝试对齐其父容器为标题的容器内的项目
- xamarin - 在 Xamarin Forms 中实施 Adobe Analytics 的步骤是什么?
- python - 根据坐标更改二维列表
- flutter - Flutter 小部件在列中的自动高度