好的...好吧,我必须将子查询放在一个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个主要类别。