我有一个聊天表,在 user_from 和 user_to 中有用户表使用的引用 ID。 现在我必须查询从聊天表中获取聊天成员列表,如 facebook caht 列表。 我和谁聊天,我必须从用户表和未读计数器中找到用户名
请给我解决方案 谢谢
最佳答案
我认为你的子查询需要关联,这会很慢。
改为使用 JOIN。
SELECT
users.id AS userid,
chat_box.id AS msgid,
first_name,
last_name,
profile_pic,
LEFT(message, 50) AS message,
u.unreadcounter
FROM
chat_box
LEFT JOIN
users ON (chat_box.user_from = users.id)
LEFT JOIN
(SELECT
u.id, COUNT(c.id) unreadcounter
FROM
chat_box c
JOIN users u ON (c.user_from = u.id)
WHERE
c.read = 0 && c.user_to = 45
GROUP BY u.id) u ON users.id = u.id
WHERE
(user_from = 45 OR user_to = 45)
&& users.id != 45
GROUP BY users.id
UNION SELECT
users.id AS userid,
chat.id AS msgid,
first_name,
last_name,
profile_pic,
LEFT(message, 50) AS message,
0 AS unreadcounter
FROM
chat_box AS chat
LEFT JOIN
users ON (chat.user_to = users.id)
WHERE
(user_from = 45 OR user_to = 45)
&& users.id != 45
GROUP BY users.id
ORDER BY msgid DESC
关于php - 如何使用两个连接获取最后的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777901/