gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:11:38 25 4
gpt4 key购买 nike

因此,我尝试在我的市场网站上的面板中显示每个卖家的个人排名。对于这个特定的排名,我计算每个卖家有多少关注者,按降序对列表进行排序,然后获取每个卖家的位置,以便他们知道自己的排名。我正在使用一个有效的查询,除非两个卖家拥有相同数量的关注者,否则位置每次都会发生变化。当大量卖家拥有相同数量的关注者时,这尤其麻烦。

查询(PHP):

<?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 之间的排名。我希望对拥有 1 个关注者的所有卖家只说 4。

更新:以下查询给了我想要的结果,尽管我仍然更喜欢将工作负载推到 PHP,而不是全部保留在 MySQL 上。

<?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);

最佳答案

你走在正确的道路上。您只需要在查询中添加几个变量即可。您可以尝试以下操作:

<?php 
$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(*) AS followers
FROM $table
GROUP BY vendor_id
ORDER BY followers DESC, vendor_id
) as sq,
(SELECT @rank:=0) AS tr
) as q WHERE vendor_id = $vendorId";
?>

请添加 @swa66 提到的更具体的排序顺序,以获得一致的有序行。当sort中使用的字段具有相同值时,mysql可能会根据自己的排序逻辑返回行。

关于PHP + mySQL - 在计数查询后获取行的共享位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com