jef*_*n24 2 php mysql select join
我知道我可以做加入,但它不完全是我想要的.
我正在制作一个主要有两个表的实时聊天系统:主聊天表(称之为表a),然后是一个mod表(称之为表b).如果用户被暂停,该频道的消息超过100,或者超过1周,消息将从主聊天表移动到mod表.
我将聊天消息的ID作为ID(主要)存储在主聊天表上,并作为modID存储在mod表上.
我正在做的是为我的Mods创建一个单独的页面,我希望能够将这两个表组合成一个区域,但我希望它们按各自的表排序.
所以我们说我们有以下内容:
主表ID:1,2,4 Mod表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
Run Code Online (Sandbox Code Playgroud)
UNION在子选择中使用a .
SELECT ab.* FROM (
SELECT 1 as table_id, * FROM a
UNION ALL
SELECT 2 as table_id, * FROM b
) ab
ORDER BY ab.id
Run Code Online (Sandbox Code Playgroud)
如果希望表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
Run Code Online (Sandbox Code Playgroud)
某些背景
UNION ALL将两个表结果集合并为一个结果集.
UNION会做同样的事情,但会消除重复的行.
这需要花费时间并减慢速度,因此如果您知道没有重复记录(或者您不关心重复),请使用UNION ALL.
另见:http://dev.mysql.com/doc/refman/5.5/en/union.html