例如我有下表:
表一:
-------------------------
| UID | Date |
-------------------------
| John | 2 |
| mark | 4 |
-------------------------
表二:
-------------------------
| UID | Date |
-------------------------
| smith | 1 |
| Nork | 3 |
-------------------------
结果我期望是按日期排序的:
----------
| smith |
| John |
| Nork |
| mark |
----------
我尝试过:
(SELECT UID
FROM table1
ORDER BY DATE DESC
LIMIT 16)
UNION
(SELECT UID
FROM table2
ORDER BY DATE DESC
LIMIT 16)
但它打印的结果是,它首先获取 table1 及其所有行,然后再获取 table2。
最佳答案
在查询中,您可以单独对表中的每个结果集进行排序,以对检索到的行应用限制。
如果您想保留合并结果集的顺序,则需要再次应用它。为此目的使用子查询。您需要进一步传递 date
列才能执行此操作,因此我将 UNION
更改为 UNION ALL
因为我们不这样做需要在这个级别应用它。在更高级别添加 DISTINCT
将处理唯一值。
SELECT DISTINCT UID
FROM (
(SELECT UID, DATE FROM table1 ORDER BY DATE DESC LIMIT 16)
UNION ALL
(SELECT UID, DATE FROM table2 ORDER BY DATE DESC LIMIT 16)
) t
ORDER BY DATE
关于mysql - 按从多个表收集的日期对行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497171/