所以我有一个小论坛,我正在尝试获取数据,有4个表,论坛,forum_posts,forum_threads和用户。我想要做的是获取每个论坛的最新帖子,并让用户偷看该帖子,我想获得每个论坛中的帖子数量和主题数量。另外,我想在一个查询中执行此操作。所以这就是我想出的:
SELECT lfx_forum_posts.*, lfx_forum.*, COUNT(lfx_forum_posts.pid) as posts_count,
lfx_users.username,
lfx_users.uid,
lfx_forum_threads.tid, lfx_forum_threads.parent_forum as t_parent,
lfx_forum_threads.text as t_text, COUNT(lfx_forum_threads.tid) as thread_count
FROM
lfx_forum
LEFT JOIN
(lfx_forum_threads
INNER JOIN
(lfx_forum_posts
INNER JOIN lfx_users
ON lfx_users.uid = lfx_forum_posts.author)
ON lfx_forum_threads.tid = lfx_forum_posts.parent_thread AND lfx_forum_posts.pid =
(SELECT MAX(lfx_forum_posts.pid)
FROM lfx_forum_posts
WHERE lfx_forum_posts.parent_forum = lfx_forum.fid
GROUP BY lfx_forum_posts.parent_forum)
)
ON lfx_forum.fid = lfx_forum_posts.parent_forum
GROUP BY lfx_forum.fid
ORDER BY lfx_forum.fid ASC
这是每个论坛的最新帖子,并给我一个偷偷摸摸的问题,那就是
lfx_forum_posts.pid =
(SELECT MAX(lfx_forum_posts.pid)
FROM lfx_forum_posts
WHERE lfx_forum_posts.parent_forum = lfx_forum.fid
GROUP BY lfx_forum_posts.parent_forum)
使我的COUNT(lfx_forum_posts.pid)变成一个(以及COUNT(lfx_forum_threads.tid),这不是我希望它工作的方式。我的问题是:是否有一些简单的方法让它显示正确的号码,同时获取正确的帖子信息(最新的信息)?
如果有什么不清楚请告诉我,我会尝试进一步解释我的问题,这是我第一次在这里发帖。
答案 0 :(得分:0)
很难只用一个大的查询来概述表的结构。 您是否考虑过制作视图以便更轻松,更快速地运行查询? 为什么要将它保存在一个查询中?就个人而言,我发现通过将过于复杂的查询分成更多部分,您通常可以获得性能和代码可读性。
但很难得到概述所以无法真正给出你的问题的好答案:)
答案 1 :(得分:0)
只需在表格中添加num_posts
列即可。不要用COUNT()计算帖子。
答案 2 :(得分:0)
我们能得到一些......
Show Tables;
Desc Table lfx_forum_posts;
Desc Table lfx_forum_threads;
Desc Table lfx_forum_users;
Desc Table lfx_forum;
这是一些伪代码
select f.*, (select count(*) from forum_posts fp where fp.forum_id = f.id) as num_posts,
(select count(*) from forum_threads ft where ft.forum_id = f.id) as num_threads,
(select max(fp.id) from forum_posts fp
where fp.id = f.id
) as latest_post_id,
from forums f;
然后继续在单独的查询中使用latest_post_id来获取它的信息。
如果它在声明之前不喜欢使用f,那么为此创建一个临时表,然后每次运行查询时都会更新。