此 SQL 运行良好,仅显示表 gchat 中的消息,其中用户是组中的成员
SELECT *
FROM gchat
LEFT JOIN codes ON (gchat.code = codes.code)
WHERE codes.u_username = 'user1'
我需要补充的是,我还有表名 (pchat) 被认为是用户之间的私有(private)聊天,所以我也想在第一个 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;
聊天
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
条件,将过滤掉整串记录。
试试这个代码。希望这对你有帮助。
关于php - 选择具有第一个条件的第三个表[SQL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42645649/