gpt4 book ai didi

mysql内连接限制结果

转载 作者:行者123 更新时间:2023-11-29 11:44:58 24 4
gpt4 key购买 nike

我有两个表,即点和评论(针对位置),评论通过 Spot_id 列引用点,我想为点数据库中的每个点选取最后 3 条评论。

我在这个问题中使用了 M Khalid Junaid 的代码:mysql select inner join limit

SELECT * FROM (
SELECT c.id, a.author_id, a.author_username, a.comment, a.timestamp,
@r:= CASE WHEN @g = c.id THEN @r +1 ELSE 1 END rownum,
@g:= c.id catgroup
FROM (SELECT * FROM spots ORDER BY timestamp DESC LIMIT $start_index , $rows_count) as c
JOIN comments a ON (c.id = a.spot_id)
CROSS JOIN (SELECT @g:=0,@r:=0) t2
ORDER BY c.id , a.timestamp desc
) t
WHERE rownum <= 3

但问题是,在达到从 1 开始计数的三个统计数据后,它会返回超过 3 行的 rownum。

这是 rownum <= 3 的结果

enter image description here

如您所见,我收到了 5 条关于地点 id 58 的评论,而不仅仅是 3 条。我是否遗漏了什么?

最佳答案

您不应在一个表达式中分配变量,然后在另一个表达式中使用它们。 MySQL 不保证 select 语句中表达式的计算顺序。就您而言,这适用于 @g

因此,编写查询的正确方法是在单个表达式中进行变量操作:

SELECT *
FROM (SELECT *,
(@r := IF(@g = c.id, @r + 1,
IF(@g := c.id, 1, 1)
)
) as rownum,
c.id as catgroup
FROM category c JOIN
articles a
ON c.id = a.category_id CROSS JOIN
(SELECT @g := 0, @r := 0) params
ORDER BY c.id, a.`date` desc
) t
WHERE rownum <= 5;

当然,如果您只想要三个结果,那么将“5”更改为“3”。

关于mysql内连接限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com