带索引号的查询结果的行数

时间:2011-08-29 16:05:16

标签: mysql

经过一些帮助后,我得到了我的数据库中的十大结果。但是没有数字指定顺序。用户当前必须查看数据以了解数据是升序还是降序。我希望每个数据都有一个数字来指定排名。

我不知道如何解决这个问题,所以建议而不是代码就足够了。有点困惑,宁愿咨询一下在我开始破解我的代码之前知道自己在做什么的人。

抱歉,我忘了添加我的代码:

          $result = mysql_query("SELECT coffeeshops.*, services.*, sum(temp.total) as final_total FROM coffeeshops inner join services on coffeeshops.shop_id=services.shop_id

内连接( 选择 SUM(舒适+服务+氛围+友善+宽敞+体验+ bud_quality + bud_price + drink_price + space_cake +辅助功能+ toilet_access)/(12)/ COUNT(shop_id)AS总计,shop_id FROM评级GROUP BY shop_id )作为临时coffeeshops.shop_id = temp.shop_id GROUP BY shop_name ORDER BY final_total DESC,shop_name ASC limit 10“);

       while($row = mysql_fetch_array($result)) { 
        OUTPUT HTML here
        }

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题,这可用于创建递增列rank

SELECT 
  @rownum:=@rownum+1 `rank`, 
  column1 
FROM table, (SELECT @rownum:=0) r 
ORDER BY column1 DESC
LIMIT 10;

为了将它与GROUP BY和聚合一起使用,您可能需要将其包装在子查询中,并将@rownum增量器放在外部查询中。

示例:

SELECT 
  @rownum:=@rownum+1 `rank`, 
  column1,
  column1_count 
FROM (
  SELECT 
   column1,
   COUNT(column1) column1_count
  FROM table
  GROUP BY column1
  ORDER BY COUNT(column1) DESC
) c,
(SELECT @rownum:=0) r
LIMIT 10;

答案 1 :(得分:0)

迈克尔的解决方案可行,但您也可以使用PHP。如果您有一个结果数组$results,则可以对其进行排序,并使用for循环打印出结果编号。例如:

sort($results); //Asc order, or use rsort($results) for Desc order
for($i=0; $i<count($results); $i++) {
    echo $results[$i].' Rank #: '.($i + 1);
}