在MySQL select语句中组合2个表

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)

Joh*_*ica 5

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

  • @ jeffran24,您需要给内部选择名称,以便MySQL知道您在说什么。它不是临时表,只是两者的联合的名称。 (2认同)