首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP + mySQL -在计数查询后获取行的共享位置

PHP + mySQL -在计数查询后获取行的共享位置
EN

Stack Overflow用户
提问于 2018-08-16 06:24:21
回答 1查看 47关注 0票数 0

因此,我试图在我的市场网站上的面板中显示每个卖家的个人排名。对于这个特定的排名,我计算每个卖家有多少追随者,按降序对列表进行排序,然后获得每个卖家的位置,以便他们知道自己的排名。我正在使用一个有效的查询,除了当两个卖家有相同数量的追随者时,位置每次都会改变。当有大量的卖家拥有相同数量的追随者时,这尤其令人困扰。

查询(PHP格式):

代码语言:javascript
复制
<?php 
    $query = "SELECT rank
        FROM (
          SELECT vendor_id, followers, @rank:=@rank+1 AS rank
          FROM (
            SELECT vendor_id, COUNT(*) AS followers
            FROM $table
            GROUP BY vendor_id
            ORDER BY followers DESC
           ) as sq,
            (SELECT @rank:=0) AS tr
          ) as q WHERE vendor_id = $vendorId";
?>

其中$vendorId =当前卖方的ID。

所以,再一次,主要的问题是,如果有10个卖家,其中7个都有1个追随者。每次卖家刷新时,他们都会看到从4到10的排名。我希望它只是说4为所有卖家谁有1个追随者。

更新:下面的查询给了我想要的,尽管我仍然喜欢把工作负载推到PHP上,而不是把它都放在MySQL上。

代码语言:javascript
复制
<?php
    $connection->query("SET @curRank:=1, @prevRank:=0, @incRank=1;");

    $query = "SELECT rank
    FROM (
    SELECT vendor_id, followers,
      @curRank := IF(@prevRank = followers, @curRank, @incRank) AS rank,
      @incRank := @incRank + 1,
      @prevRank := followers
        FROM (
    SELECT vendor_id, COUNT(1) AS followers
    FROM $favTable
            GROUP BY vendor_id
    ORDER BY followers DESC, vendor_id DESC
        ) as sq,
        (SELECT @rank:=0) AS tr
     ) as q WHERE vendor_id = $vendorId";

    $result = $connection->fetchOne($query);
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51867263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档