我有表tbl_posts
和tbl_comments
,主键分别post_id
和comment_id
。我尝试了以下代码:
$allPosts=mysql_query("
select c.comment_id, post_id, count(*)
from post u,
comments c
where u.comment_id = c.comment_id
group by comment_id, post_id
LIMIT 10
");
但我不知道它的作用。如何合并两个表格,以便总评论数确定列出的帖子的顺序tbl_posts
?
试试这个,如果你按行分开并使用联接,它会更易读
select c.comment_id, post_id, count(*)
from post u join comments c
on u.comment_id = c.comment_id
group by comment_id, post_id LIMIT 10
看起来您有名为 tbl_comment 和 tbl_post 的表,但您的查询将它们列为评论和帖子。
select c.comment_id, post_id, count(*)
from tbl_post u, tbl_comments c
where u.comment_id = c.comment_id
group by comment_id, post_id LIMIT 10
$allPosts=mysql_query("select c.comment_id, post_id, count(*) from tbl_post u, tbl_comments c where u.comment_id = c.comment_id group by comment_id, post_id LIMIT 10");
这只是修复了查询,使其运行,并且没有解决您可能遇到的任何问题,即两个(我猜测的)上的分组都是主键。
**编辑**要修复排序,请尝试:
SELECT tbl_post.comment_id, count(*)
FROM tbl_post, tbl_comments
WHERE tbl_post.comment_id = tbl_comment.comment_id
GROUP BY comment_id LIMIT 10
ORDER BY count(*)
SQL 的解释:
您将使用内部联接从表注释中选择列comment_id,从表帖子中选择列post_id,按comment_id post_id分组,结果限制为 10 个。
我会尝试:
$allPosts = mysql_query("SELECT * FROM
(SELECT c.comment_id, u.post_id, COUNT(*) AS 'count' FROM post u
LEFT JOIN comments c ON c.comment_id = u.comment_id
GROUP BY c.comment_id, u.post_id)
ORDER BY count DESC LIMIT 10");