mysql left join 右表存在重复数据,怎么处理?

2016-11-06 11:09:43 +08:00
 shawshi

我有两张表, A 表为文章, B 表为评论表。 我想通过 A 表关联 B 表,并取 B 表最新的评论内容?

我看到网上有说使用 max(id) 然后对 A 表 in ( max(id)),我感觉这样在 A 表内容很多的时候会存在性能问题,不知有没有其他解决方法。

13736 次点击
所在节点    MySQL
26 条回复
mzsongyan
2016-11-06 11:21:16 +08:00
用 order by 啊
shawshi
2016-11-06 11:32:14 +08:00
@mzsongyan 单独通过 order by 是没发去除重复的。我去除重复一般使用 ```GROUP BY```做的。但是 ```GROUP BY ``` 是先去重在排序。这样 B 表取不到最新的值。
mzsongyan
2016-11-06 11:36:35 +08:00
不明白评论还有重复的……
mzsongyan
2016-11-06 11:38:21 +08:00
可以试试 distinct
shawshi
2016-11-06 11:38:50 +08:00
@mzsongyan A 表和 B 表是 一对多的关系。一个文章可以有多个评论
qiayue
2016-11-06 11:46:06 +08:00
分两次查询不好吗
shawshi
2016-11-06 11:50:30 +08:00
@qiayue 说个思路我想一下
des
2016-11-06 11:58:42 +08:00
@qiayue 一次就能搞定的还得分两次查?
@shawshi 讲真,我真不明白怎么个重复法,你要取最新的一条用 top 不就完了吗?
如果是内容有重复的,那是你自己的的问题吧?或者用户卡了多刷新了一下
GGGG430
2016-11-06 12:15:37 +08:00
增加一个 redis 做缓存怎么样, 一分钟刷新一次最新评论
qiayue
2016-11-06 12:21:34 +08:00
@des 没有好坏之分,不同的场合用不同的办法
如果数据量太大或者访问量大的情况下,分两次查询,再配合缓存,效果绝对比一次查询好。
YK46PTT
2016-11-06 12:28:16 +08:00
@qiayue 说的对,分 2 次查询。
xzem
2016-11-06 12:30:12 +08:00
>A 表和 B 表是 一对多的关系。一个文章可以有多个评论


这个只是多个评论不算是重复吧? 也不用去重啊, 想取最新的评价直接 order by 不就行了?
latyas
2016-11-06 12:32:02 +08:00
谁是右表?评论表?用什么键关联
latyas
2016-11-06 12:33:35 +08:00
@des 上学的时候我觉得 良范式化的结构设计可以在很多场景下一次把数据查出来

后来工作了发现 bullshit ,很多时候都要异构查询
shawshi
2016-11-06 12:48:07 +08:00
@des 我想获取每编文章下的最新一条评论该怎么做?
shawshi
2016-11-06 12:48:58 +08:00
@qiayue
@YK46PTT 能否告知怎么个分两次查
mringg
2016-11-06 12:51:38 +08:00
右表先去重, group by 后 order by 根据 row number 取最新的一条评论
shawshi
2016-11-06 13:03:22 +08:00
@mringg [group by] 只能取到第一条数据,但是那第一条数据不是最新的一条
latyas
2016-11-06 13:07:59 +08:00
对给定文章,评论表自增 id 最大和“最新”是否是一个意思? (前提是有自增 id 而不是 uuid 。。)
fantasleotao
2016-11-06 13:10:14 +08:00
partition by

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/318445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX