gpt4 book ai didi

php - 根据sql中的顺序获取行的排名

转载 作者:行者123 更新时间:2023-11-29 05:14:07 25 4
gpt4 key购买 nike

假设我有如下两个表:

user_id
1
2
3

post_id user_id
1 2
2 3
3 2

第一个表包含所有用户信息,第二个表是用户的帖子列表。

有了这些表,我想对谁发布的帖子最多进行排名。为此,我可以使用以下 sql

select user.user_id from user
left join post on user.user_id=post.user_id
order by count(post.post_id)

这会给我

user_id
2
3
1

,但如果我只想要单个用户的排名怎么办?换句话说,我想编写一个 sql 语句,在给定 user_id 的情况下返回用户所在的位置。例如,如果 user_id 为 2,我希望输出 1;如果 user_id 为 3,我希望输出 2;如果 user_id 为 1,我希望输出 3。

这可能吗,还是我必须选择整个表格并在 php 中执行 while 循环,直到我点击用户并计算上面的行数?

最佳答案

不幸的是,对于单个用户的排名,您几乎必须计算每个人的排名,然后提取单个用户。所以,所有用户的排名是:

select u.user_id, count(p.post_id), (@rn := @rn + 1) as ranking
from user u left join
post p
on u.user_id = p.user_id cross join
(select @rn := 0) params
group by u.user_id
order by count(p.post_id) desc;

对于一个用户,使用子查询:

select *
from (select u.user_id, count(p.post_id), (@rn := @rn + 1) as ranking
from user u left join
post p
on u.user_id = p.user_id cross join
(select @rn := 0) params
order by count(p.post_id) desc
) u
where u.user_id = $USERID;

关于php - 根据sql中的顺序获取行的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35491463/

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