我有两张表, A 表为文章, B 表为评论表。 我想通过 A 表关联 B 表,并取 B 表最新的评论内容?
我看到网上有说使用 max(id) 然后对 A 表 in ( max(id)),我感觉这样在 A 表内容很多的时候会存在性能问题,不知有没有其他解决方法。
1
mzsongyan 2016-11-06 11:21:16 +08:00 via iPhone
用 order by 啊
|
2
shawshi OP @mzsongyan 单独通过 order by 是没发去除重复的。我去除重复一般使用 ```GROUP BY```做的。但是 ```GROUP BY ``` 是先去重在排序。这样 B 表取不到最新的值。
|
3
mzsongyan 2016-11-06 11:36:35 +08:00 via iPhone
不明白评论还有重复的……
|
4
mzsongyan 2016-11-06 11:38:21 +08:00 via iPhone
可以试试 distinct
|
6
qiayue 2016-11-06 11:46:06 +08:00
分两次查询不好吗
|
8
des 2016-11-06 11:58:42 +08:00 via Android
|
9
GGGG430 2016-11-06 12:15:37 +08:00
增加一个 redis 做缓存怎么样, 一分钟刷新一次最新评论
|
10
qiayue 2016-11-06 12:21:34 +08:00
@des 没有好坏之分,不同的场合用不同的办法
如果数据量太大或者访问量大的情况下,分两次查询,再配合缓存,效果绝对比一次查询好。 |
12
xzem 2016-11-06 12:30:12 +08:00
>A 表和 B 表是 一对多的关系。一个文章可以有多个评论
这个只是多个评论不算是重复吧? 也不用去重啊, 想取最新的评价直接 order by 不就行了? |
13
latyas 2016-11-06 12:32:02 +08:00
谁是右表?评论表?用什么键关联
|
14
latyas 2016-11-06 12:33:35 +08:00
|
17
mringg 2016-11-06 12:51:38 +08:00 via iPhone 1
右表先去重, group by 后 order by 根据 row number 取最新的一条评论
|
19
latyas 2016-11-06 13:07:59 +08:00
对给定文章,评论表自增 id 最大和“最新”是否是一个意思? (前提是有自增 id 而不是 uuid 。。)
|
20
fantasleotao 2016-11-06 13:10:14 +08:00
partition by
|
21
des 2016-11-06 14:35:35 +08:00
@shawshi
这样如何 SELECT * FROM users LEFT JOIN (SELECT uid,post,max(time) AS time FROM post GROUP BY uid) USING(uid); |
22
mliilm 2016-11-06 14:41:01 +08:00
需要用 window function ,比如 row number, first value 之类的
|
24
liujin834 2016-11-06 15:56:45 +08:00
|
25
reus 2016-11-07 03:59:04 +08:00
这种用窗口函数都是最简单的问题,所以换用 postgresql 吧, mysql 的查询太弱了!
|