计算表中的行位置

时间:2009-08-18 16:40:29

标签: php sql mysql

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

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;

但是,此外,我想根据 rating 列计算此行的位置,并将其作为附加列获取,假设称为site_rank(因此,该等级的值越大row是site_rank会越高,我希望我解释得很好)。我猜这可以通过子选择查询来实现,但我不知道该怎么做。

任何帮助?

4 个答案:

答案 0 :(得分:2)

这将为大多数投票媒体输出高rank

如果您希望投票最多的人排名较低(例如,投票最多的人获得rank的{​​{1}}),只需反转子查询中的符号。

1

答案 1 :(得分:2)

SELECT count(*) FROM media WHERE rating > (SELECT rating FROM media WHERE id = 5);

答案 2 :(得分:1)

SELECT
    m1.*,
    (SELECT COUNT(*) FROM media AS m2 WHERE m2.rating > m1.rating) AS site_rank
FROM
    media AS m1
WHERE
    id = 5;

请注意,这并未定义完整的排序,因为可能会有相同评级的项目,并且他们会报告相同的网站排名。

答案 3 :(得分:1)

MySQL是否支持标准的SQL rank()函数?它完全符合您的要求。

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