我想得到我所有的帖子数据,以显示在我的网页上与这个选择。我有一个包含大多数帖子(+回复)数据的表posts,还有一个跟踪查看和喜欢它的人的表social (每个赞都是一个新行)。通常我可以得到用户名,发布时间,内容...但我正在努力获得帖子的浏览量、点赞数和同一选择中的回复数。我的基本选择如下所示:
SELECT posts.username, posts.time, cat.cat_name,
posts.title, posts.content, posts.reply,
posts.user_file, posts.audio, social.id,
social.views, social.likes
FROM posts
LEFT JOIN user on posts.user_id = user.id
LEFT JOIN cat ON posts.cat_id = cat.id
LEFT JOIN social ON posts.id = social.post_id如果我想获得每个帖子的评论数量,我会使用(如果reply中的值是0,那么它就是一个帖子,如果它是一个回复,它包含它引用的帖子id ):
SELECT COUNT(*) AS `comments` FROM posts GROUP BY reply
/* this returns an error: SQL Error (1242): Subquery returns more than 1 row */我会得到像这样的点赞和浏览量:
SELECT MAX(social.views) AS views FROM social GROUP BY post_id
SELECT social.likes FROM social WHERE social.id = (SELECT MAX(social.id) FROM social GROUP BY post_id但是,如果我在前面的SELECT中一起使用它,它只会用相同的数字填充每一行。示例:
... posts.audio, social.id, (SELECT MAX(social.views) AS views FROM social GROUP BY post_id) FROM posts ...这只是填充每一行,即使它不应该有25的视图(对于1个特定的行是正确的值,但对于其他所有行是错误的)。
像这样做出更大选择的合适方式是什么?
我不确定它是否重要,但我将它与NodeJS中的MySQL模块一起使用。
发布于 2021-08-26 18:38:39
试试这条路
SELECT posts.username, posts.time, cat.cat_name,
posts.title, posts.content, posts.reply,
posts.user_file, posts.audio,
COUNT(social.views), COUNT(social.likes)
FROM posts
LEFT JOIN user on posts.user_id = user.id
LEFT JOIN cat ON posts.cat_id = cat.id
LEFT JOIN social ON posts.id = social.post_id
GROUP BY
posts.username, posts.time, cat.cat_name,
posts.title, posts.content, posts.reply,
posts.user_file, posts.audio发布于 2021-08-27 14:25:29
这是我在一个查询中获得的最接近SELECTing的所有东西,但我仍然没有办法计算评论的数量:
SELECT posts.username, posts.time, cat.cat_name,
posts.title, posts.content, posts.reply,
posts.user_file, posts.audio,
social.views, social.likes
FROM posts
LEFT JOIN user on posts.user_id = user.id
LEFT JOIN cat ON posts.cat_id = cat.id
LEFT JOIN social ON posts.id = social.post_id
WHERE social.likes IN (SELECT social.likes FROM social
WHERE social.id IN (SELECT MAX(social.id)
FROM social GROUP BY post_id))
GROUP BY social.post_id
HAVING posts.reply = 0https://stackoverflow.com/questions/68943705
复制相似问题