【问题标题】:Get Rank by votes and number of same rank PHP MySQL通过票数和相同排名的PHP MySQL的数量获取排名
【发布时间】:2022-11-23 16:54:53
【问题描述】:

我试图通过投票获得排名和相同排名的数量,但不幸的是没有成功。

Here my table structure:

| ID| user_id | votes |
| --| ------- | ----- |
| 1 | D10     | 15    |
| 2 | D5      | 9     | 
| 3 | D20     | 9     |
| 4 | D23     | 7     |   
| 5 | D35     | 3     |
| 6 | D65     | 2     |

我需要根据投票的用户排名,参考上表我需要排名为:

| user_id | Rank|
| ------- | ----|
| D10     | 1   |
| D5      | 2   | 
| D20     | 2   |
| D23     | 3   |   
| D35     | 4   |
| D65     | 5   |

我还需要等级数,指的是我需要的以上等级:

Rank 1 = 1
Rank 2 = 2
Rank 3 = 1
Rank 4 = 1
rank 5 = 1

我试图获得排名:

SELECT user_id, votes, FIND_IN_SET( votes, (
SELECT GROUP_CONCAT( DISTINCT votes
ORDER BY votes DESC ) FROM table)
) AS rank
FROM votes

上面的查询我尝试参考this answer来获得排名,但我收到错误:

#1064 - 您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解要使用的正确语法 近 '( 投票,(SELECT GROUP_CONCAT( DISTINCT 投票 ORDER BY 投票 DESC )

我需要使用 PHP 和 MySQL 获得所需的结果。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    在 MySQL 8+ 上,您可以使用 Windows 函数 dense_rank 并计数

    with votes_rank as (
    select *,
          dense_rank() over (order by votes desc) as rnk
    from votes
    ) , count_rank as 
      ( select votes_rank.*,
               count(*)over (partition by rnk) as cnt
       from votes_rank
      ) select id,
               user_id,
               votes,
               rnk as votes_rank,
               cnt as count_rank
    from  count_rank;
    

    https://dbfiddle.uk/o1DiPyDz

    考虑以下数据,

    CREATE TABLE votes (
      id int,
      user_id varchar(10),
      votes int );
    
    insert into votes values  (1,'D10',15), (2,'D5 ',9), (3,'D20',9), (4,'D23',7), (7,'D50',7), (5,'D35',3), (6,'D65',2);
    

    结果:

    id    user_id votes   votes_rank  count_rank
    1       D10    15         1         1
    2       D5     9          2         2
    3       D20    9          2         2
    4       D23    7          3         2
    7       D50    7          3         2
    5       D35    3          4         1
    6       D65    2          5         1
    

    【讨论】:

    • sql版本是5.0
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2019-03-15
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多