gpt4 book ai didi

mysql - 我是否在我的 SQL 语句中运行了太多子查询?

转载 作者:搜寻专家 更新时间:2023-10-30 23:21:09 25 4
gpt4 key购买 nike

我有以下表格:

users:
user_id
user_name

message:
message_id
thread_id
to_id
from_id
title
message_text
message_date
status

我运行的查询的预期结果是列出来自最近线程的最新消息的 title 以及 thread_idusername 并按 date 降序对结果进行排序。我很可能一次只列出大约 10 到 20 个结果。

到目前为止,我提出的 SQL 查询似乎是这样做的,但我觉得我把它复杂化了,可能有更优化的方式来编写我的查询。

    SELECT personal_messages.message_id, 
personal_messages.thread_id,
personal_messages.body,
users.username
FROM users, personal_messages
WHERE message_id IN
(SELECT MAX(message_id) from personal_messages GROUP BY thread_id)
AND users.id IN
(SELECT users.id FROM users WHERE users.id = personal_messages.from_id)
ORDER BY personal_messages.message_date DESC

此外,如果有人知道如何获取具有相同 thread_id 的所有消息的 count,那就太棒了!

如有任何提示,我们将不胜感激!

最佳答案

其中一个子选择可能是不必要的

SELECT personal_messages.message_id, personal_messages.thread_id, personal_messages.body, users.username
FROM users INNER JOIN personal_messages ON (users.id = personal_messages.from_id)
WHERE message_id IN (SELECT MAX(message_id) from personal_messages GROUP BY thread_id)
ORDER BY personal_messages.message_date DESC

编辑:此外,如果有人知道一种方法来计算具有相同 thread_id 的所有消息的数量,那就太棒了!

SELECT MAX(message_id), COUNT(message_id) FROM personal_messages GROUP BY thread_id

关于mysql - 我是否在我的 SQL 语句中运行了太多子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com