此SQL工作正常,仅显示表gchat中的消息,其中用户是该组的成员
SELECT *
FROM gchat
LEFT JOIN codes ON (gchat.code = codes.code)
WHERE codes.u_username = 'user1'
我需要添加的内容还有表名(pchat)被视为用户之间的私人聊天,所以我也想在第一个SQL语句中显示属于“ user1”的消息
表结构
聊天
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;
hat
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;
最佳答案
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
在这里,我为
gchat
和pchat
表做了两个不同的投影,并使用UNION
合并了两个表中的所有记录。对于使用的特定用户WHERE
条件,它将过滤掉整条记录。试试这个代码。希望对您有帮助。