代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

计算表中的行位置

  •  0
  • Richard Knop  · 技术社区  · 15 年前

    假设我有一个这样的表(这只是一个简化的示例,我所说的实际表要复杂得多):

    CREATE TABLE media (
    id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    description TEXT NOT NULL,
    voted INT NOT NULL DEFAULT 0,
    rating FLOAT NOT NULL DEFAULT 0
    ) ENGINE = INNODB;
    

    投票 列表示项目已收到的票数以及 评级

    现在,我要做的是根据id从表中选择一项,类似于:

    SELECT m.* FROM media AS m WHERE id = 5;
    

    评级

    有什么帮助吗?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Quassnoi    15 年前

    这将产生高输出 rank

    等级 1 ),只需反转子查询中的符号即可。

    SELECT  mo.*,
            (
            SELECT  COUNT(*)
            FROM    media mi
            WHERE   (mi.rating, mi.id) <= (mo.rating, mo.id)
            ) AS rank
    FROM    media mo
    WHERE   mo.id = 5
    
        2
  •  2
  •   Jeff Ferland    15 年前
    SELECT count(*) FROM media WHERE rating > (SELECT rating FROM media WHERE id = 5);
    
        3
  •  1
  •   Daniel Brückner Pradip    15 年前
    SELECT
        m1.*,
        (SELECT COUNT(*) FROM media AS m2 WHERE m2.rating > m1.rating) AS site_rank
    FROM
        media AS m1
    WHERE
        id = 5;
    

        4
  •  1
  •   Steve Kass    15 年前

    MySQL是否支持标准的SQL rank()函数?这正是你想要的。

    select
      *,
      rank() over (
        order by rating desc
      ) as site_rank
    from media