gpt4 book ai didi

MYSQL 子查询 SELECT in JOIN 子句

转载 作者:可可西里 更新时间:2023-11-01 06:32:07 25 4
gpt4 key购买 nike

好的...好吧,我必须将子查询放在 JOIN 子句中,因为它选择了多个列并将其放在 SELECT 子句中不允许这样做因为它给了我一个操作数错误。任何人,这是我的查询:

SELECT 
c.id,
c.title,
c.description,
c.icon,
p.id as topic_id,
p.title AS topic_title,
p.date,
p.username
FROM forum_cat c
LEFT JOIN (
SELECT
ft.id,
ft.cat_id,
ft.title,
fp.date,
u.username
FROM forum_topic ft
JOIN forum_post fp ON fp.topic_id = ft.id
JOIN user u ON u.user_id = fp.author_id
WHERE ft.cat_id = c.id
ORDER BY fp.date DESC
LIMIT 1
) p ON p.cat_id = c.id
WHERE c.main_cat = ?
ORDER BY c.list_no

现在我需要做的重要事情是... FOR EACH 类别,我想显示每个类别中的最新帖子和主题标题。但是,此 select 语句将进入一个 foreach 循环,该循环围绕我的 main_cat 中找到的一般类别进行循环。所以有 5 个主要类别和 3-8 个子类别。这是子类别查询。但是对于每个子类别,我需要获取最新的帖子。但是,它只对每个主要类别运行这个 SELECT 查询,所以它只选择所有子类别之间的最新帖子...我想获取每个子类别的最新帖子,但我不想为每个子类别运行此查询...因为我希望页面加载速度快。但请记住,一些子类别不会有最新的帖子,因为其中一些甚至可能还没有包含主题!因此,左连接。

有人知道怎么做吗?

顺便说一句,它在子查询中给我 (WHERE ft.cat_id = c.id) 一个错误,因为 c.id 是一个未知列。但我正在尝试从外部查询中引用它,所以有人可以帮助我解决这个问题吗?

谢谢!

所有表:

forum_cat (Subcategories)
-----------------------------------------------
ID, Title, Description, Icon, Main_cat, List_no

forum_topic (Topics in each subcategory)
--------------------------------------------
ID, Author_id, Cat_id, Title, Sticky, Locked

forum_post (Posts in each topic)
--------------------------------------------
ID, Topic_id, Author_id, Body, Date, Hidden'

主要类别列在函数中。我没有将它们存储在数据库中,因为这是浪费空间,因为它们永远不会改变。不过有 7 个主要类别。

最佳答案

如果不查看表的 DDL、相关示例数据和所需输出,则很难判断。

我可能理解错了你的要求,但试试这个:

SELECT *  
FROM forum_cat c LEFT JOIN
(SELECT t.cat_id,
p.topic_id,
t.title,
p.id,
p.body,
MAX(p.`date`) AS `date`,
p.author_id,
u.username
FROM forum_post p INNER JOIN
forum_topic t ON t.id = p.topic_id INNER JOIN
`user` u ON u.user_id = p.author_id
GROUP BY t.cat_id) d ON d.cat_id = c.id
WHERE c.main_cat = 1
ORDER BY c.list_no

关于MYSQL 子查询 SELECT in JOIN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483739/

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