如果另一个表中的另一个记录不存在,则选择所有行

时间:2015-11-14 01:04:26

标签: mysql

我有一个这样的表,可以在玩家之间存储私人消息

id              int(11)
userid          int(11)
type            int(1)
global          tinyint(1)
subject         varchar(55)
content         text
receiver_id     int(11)
allianceID      int(11)
create_date     datetime
read_date       datetime

现在,当用户选择从收件箱中删除邮件时,我实际上并不想从数据库中删除邮件。我有一个名为messages_hidden的单独表格,其结构如下

userid      int(11)
message_id  int(11) 

messages_hidden表存储了他们的用户ID以及他们删除的相应消息"来自他们的收件箱所以它不再显示。

现在,我的查询是,在登录后,从数据库中提取所有消息以显示给他们(查询的某些部分因长度而被剪断)。

SELECT 
        msg.id,msg.type, msg.subject, msg.content, DATE_FORMAT(msg.create_date, '%b %D, %Y') as create_date,
        IF(read_date > create_date, 1, 0) AS hasRead, sender.id AS sender_id, sender.username AS sender_username, receiver.id AS receiver_id, receiver.username AS receiver_username
FROM messages AS msg
    LEFT JOIN users AS sender ON msg.userid = sender.id
    LEFT JOIN users AS receiver ON msg.receiver_id = receiver.id
WHERE (msg.receiver_id = ? OR msg.userid = ? OR msg.global = 1) ORDER BY create_date DESC

此查询目前工作正常,但如何加入messages_hidden并仅提取尚未删除的邮件"还是由用户隐藏?

我希望我能很好地解释我的问题。如果你不清楚我的问题的某一部分,请随时问。谢谢!

0 个答案:

没有答案