首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确组合这些选择(MySQL)?

问如何正确组合这些选择(MySQL)?
EN

Stack Overflow用户
提问于 2021-08-26 18:29:09
回答 2查看 36关注 0票数 0

我想得到我所有的帖子数据,以显示在我的网页上与这个选择。我有一个包含大多数帖子(+回复)数据的表posts,还有一个跟踪查看和喜欢它的人的表social (每个赞都是一个新行)。通常我可以得到用户名,发布时间,内容...但我正在努力获得帖子的浏览量、点赞数和同一选择中的回复数。我的基本选择如下所示:

代码语言:javascript
复制
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 ):

代码语言:javascript
复制
SELECT COUNT(*) AS `comments` FROM posts GROUP BY reply
/* this returns an error: SQL Error (1242): Subquery returns more than 1 row */

我会得到像这样的点赞和浏览量:

代码语言:javascript
复制
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中一起使用它,它只会用相同的数字填充每一行。示例:

代码语言:javascript
复制
... posts.audio, social.id, (SELECT MAX(social.views) AS views FROM social GROUP BY post_id) FROM posts ...

这只是填充每一行,即使它不应该有25的视图(对于1个特定的行是正确的值,但对于其他所有行是错误的)。

像这样做出更大选择的合适方式是什么?

我不确定它是否重要,但我将它与NodeJS中的MySQL模块一起使用。

EN

回答 2

Stack Overflow用户

发布于 2021-08-26 18:38:39

试试这条路

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-08-27 14:25:29

这是我在一个查询中获得的最接近SELECTing的所有东西,但我仍然没有办法计算评论的数量:

代码语言:javascript
复制
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 = 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68943705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档