此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


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

试试这个代码。希望对您有帮助。

10-04 15:49