gpt4 book ai didi

php - 在 MySQL select 语句中合并 2 个表

转载 作者:行者123 更新时间:2023-11-29 01:32:51 25 4
gpt4 key购买 nike

我知道我可以进行联接,但这并不完全是我想要的。

我正在制作一个实时聊天系统,主要有 2 个表:主聊天表(称为表 a),然后是 mod 表(称为表 b)​​。如果用户被暂停,该 channel 的消息超过 100 条,或者超过 1 周,消息将从主聊天表移至 mod 表。

我将聊天消息的 ID 作为 ID(primary) 存储在主聊天表上,并在 mod 表上存储为 chatID。

我正在做的是为我的 Mod 制作一个单独的页面,我希望能够将两个表格合并到 1 个区域中,但我希望它们按各自的表格排序。

假设我们有以下内容:

主表 ID:1,2,4模组表ID:3

我希望我的结果显示 1,2,3,4,无论 ID 在哪个表中。

非常感谢任何帮助!

编辑:我得到了答案,这就是我曾经这样做的:

SELECT ab.* FROM 
((SELECT ID as table_id FROM a
WHERE roomID = 'newUsers' ORDER BY ID ASC)
UNION ALL
(SELECT chatID as table_id FROM b
WHERE roomID = 'newUsers' ORDER BY chatID ASC)) ab
ORDER BY ab.table_id

最佳答案

在子选择中使用UNION

SELECT ab.* FROM (
SELECT 1 as table_id, * FROM a
UNION ALL
SELECT 2 as table_id, * FROM b
) ab
ORDER BY ab.id

如果您希望表 A 的结果出现在表 B 之前,请将查询更改为:

SELECT ab.* FROM (
SELECT 1 as table_id, * FROM a
UNION ALL
SELECT 2 as table_id, * FROM b
) ab
ORDER BY ab.table_id, ab.id

一些背景
UNION ALL 会将两个 table 结果集合并为一个结果集。
UNION 将执行相同的操作,但会消除重复的行。
这需要时间并减慢速度,因此如果您知道不会有重复记录(或者您不关心重复),请使用UNION ALL

另请参阅:http://dev.mysql.com/doc/refman/5.5/en/union.html

关于php - 在 MySQL select 语句中合并 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com