制作一个消息系统并在收件箱页面上工作。
收件箱页面以类似“线程”的方式组织,我想展示两方之间的最新通信。想想 facebook 收件箱(左侧部分),无论您发送消息还是对方发送消息,它都会显示最新发送的消息。
这是我当前的查询:
SELECT
m.*,
s.*,
c.*,
u.*,
CASE
WHEN m.uid_recipient <> 292 THEN @user_id := m.uid_recipient
WHEN m.uid_sender <> 292 THEN @user_id := m.uid_sender
END
FROM messages m
JOIN signup s ON s.uid = @user_id
LEFT JOIN companies c ON c.uid = s.uid
LEFT JOIN users u ON u.uid = s.uid
WHERE COALESCE(u.uid, c.uid) IS NOT NULL
AND (m.uid_recipient = 292 AND deleted_recipient = '0')
OR (m.uid_sender = 292 AND deleted_sender = '0')
ORDER BY datetime DESC
此查询运行但返回一个空结果集,它应该返回 3 个结果。
消息在带有发件人 ID 和收件人 ID 的表中。现在我要做的是将对方的信息加入行。所以我的 case 语句会评估接收者 id 是否是当前用户的 id,如果不是,它应该将 @user_id 变量设置为对方的 id,这样它就可以用于将对方的信息加入该行。
消息表如下所示(相关列):
----------------------------------------------
|uid_sender |uid_recipient |message |
----------------------------------------------
|292 |1040 |Test 3 |
----------------------------------------------
|1040 |292 |Test reply |
----------------------------------------------
|292 |1040 |First msg |
----------------------------------------------
我倾向于认为列的值未分配给变量,但我不知道如何调试此查询以返回分配给@user_id 的值。无论如何在mysql查询中转储值?
任何帮助表示赞赏。
谢谢你。