我有以下表格:
消息:
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/