MySQL左连接自定义查询

标签 mysql

我有以下表格:

消息:

id
thread_id
user_id
comment
timestamp

messages_status:

id
message_id
user_id
status

messages 表中的 user_id 标记创建评论的用户的 ID,而 messages_status 表中的 user_id 标记设置评论的接收用户的 ID状态(即已读/未读)。

我使用以下查询从线程中检索消息:

SELECT `messages`.*, 
coalesce(messages_status.status, "unread") AS `status` 

FROM `messages` 

LEFT JOIN `messages_status` ON messages_status.message_id = messages.id 
and messages_status.user_id = 143

WHERE (thread_id = '40')

这样,当messages_status 表中没有某个message_id 和user_id 的行时,它将返回“未读”。

但是,如果查询中的 messages_status.user_id 值(例如 143)与 messages.user_id 相同(即同一用户创建了评论) ,messages_status 表中没有行,但查询应返回“已读”(如果我是创建评论的用户,显然我也已阅读)。

有没有办法创建这样的查询?

最佳答案

如何添加额外的 IF 语句,

SELECT  a.*,
        IF(a.user_ID = 143, 'READ', COALESCE(b.status, 'unread')) AS `status` 
FROM    messages a
        LEFT JOIN messages_status b
            ON a.id = b.message_id
                AND b.user_id = 143
WHERE   a.thread_id = 40

关于MySQL左连接自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24135712/

相关文章:

php - Symfony2 ManyToMany 嵌入表单意外结果

php - 将 ID 传递给函数中的 pre_get_posts 查询

mysql - 创建表为(使用列和表名)

具有不同执行计划的 MySQL Master 和 Slave

Php - 使用路径(PDO)显示数据库中的图像

Mysql在存储过程中使用LAST_INSERT_ID

MySQL 左连接带有子 IsDeleted 标志

mysql - 如何避免mysql缓存

mysql - 连接两个表,为第一个表中的每个唯一行返回一行

mysql - 执行时比较两个查询