0

我有下表国家

country  clicks
-------  ------
0        222
66       34 
175      1000
45       650

并且我使用下面的MYSQL语句根据clicks列获取任何国家的排名(只有一个结果)

SELECT COUNT(*) rank 
FROM countryTable a 
JOIN countryTable b 
   ON a.clicks <= b.clicks 
WHERE a.country = 45

以上将返回“2”。然后在我的 php 代码中,我尝试使用

$row =  mysql_fetch_array($result) or die(mysql_error()); 
echo $row['rank'];

但是,如果该国家/地区排名第一,则不会返回任何结果。即a.country = 175

4

3 回答 3

1

如果您正在寻找排名,请使用此:

SELECT @rownum := @rownum + 1 AS num,
    t.country, t.clicks
FROM countryTable t, 
    (SELECT @rownum := 0) r
ORDER BY t.clicks DESC

结果

| 数字 | 国家 | 点击 |
--------------------------
| 1 | 175 | 1000 |
| 2 | 45 | 650 |
| 3 | 0 | 222 |
| 4 | 66 | 34 |

看到它在行动

于 2013-01-12T17:45:33.163 回答
1

连接 ON 是列之间的连接,而不是比较。

更新

SELECT COUNT(*)+1 rank 
FROM countryTable
WHERE clicks > (SELECT clicks FROM countryTable WHERE country = 45)

推理:搜索排名意味着搜索点击次数 > 给定点击次数的记录数。

因此,对于 175,有 0 个国家的点击率更高 => 排名 1,国家 45,1 个国家的点击率更高 => 排名 2

PHP

$result = mysql_query("....")
$row = mysql_fetch_array($result)
...

通常它应该可以工作,除非您在连接到服务器时遇到问题。这就是你应该使用调试技能的地方。做一个 var_dump($result) 看它是否返回 false,如果是那么它是一个连接问题(检查 mysql_connect 或其他东西)

于 2013-01-12T17:08:31.937 回答
0

@PutraKg 我认为您可以关闭这个问题,因为我在这篇文章中回答了它MYSQL 仅在询问第一个排名时不会返回 PHP 中的结果;-)

于 2013-01-13T17:54:31.333 回答