选择具有第一个条件的第三个表[SQL]

时间:2017-03-07 10:22:32

标签: php mysql sql database

这个SQL工作正常,只显示用户是该组成员的表gchat中的消息

SELECT *
FROM gchat 
LEFT JOIN codes ON (gchat.code = codes.code)
WHERE codes.u_username = 'user1'

我需要添加的内容,我还将表名(pchat)视为用户之间的私聊,因此我也希望在第一个SQL语句中显示属于'user1'的消息

表格结构

Google即时通讯

CREATE TABLE `gchat` (
  `id` int(11) NOT NULL,
  `code` varchar(255) NOT NULL,
  `fromuser` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

pchat

CREATE TABLE `pchat` (
  `id` int(11) NOT NULL,
  `fromuser` varchar(255) NOT NULL,
  `touser` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

1 个答案:

答案 0 :(得分:0)

SELECT * FROM 
(
 SELECT gchat.id,gchat.fromuser,gchat.text,gchat.date
 FROM gchat 
 LEFT JOIN codes ON (gchat.code = codes.code)
 WHERE codes.u_username = 'user1'
  UNION
 SELECT id,fromuser,text,date
 FROM pchat 
 WHERE fromuser='user1'
)Z

在这里,我为gchatpchat表做了两个不同的投影,并使用UNION组合了两个表中的所有记录。对于使用的特定用户WHERE条件,将过滤掉整堆记录。

试试这段代码。希望这会对你有帮助。