我有以下tableCountry
country clicks
------- ------
0 222
66 34
175 1000
45 650
我使用以下MYSQL语句根据点击列(仅一个结果)获取任何国家/地区的排名
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
答案 0 :(得分:1)
连接ON是列之间的连接,而不是比较。
<强>已更新强>
SELECT COUNT(*)+1 rank
FROM countryTable
WHERE clicks > (SELECT clicks FROM countryTable WHERE country = 45)
推理:搜索排名意味着搜索具有点击次数的记录数量&gt;给定的点击。
因此,对于175,有0个国家/地区有更好的点击次数=&gt;排名1,国家45,1个国家/地区点击次数更多=&gt;等级2
<强> PHP 强>
$result = mysql_query("....")
$row = mysql_fetch_array($result)
...
除非您在连接服务器时遇到问题,否则它通常会起作用。那是你应该使用你的调试技巧的地方。执行var_dump($ result)以查看是否返回false,如果是,则表示存在连接问题(请检查mysql_connect或其他内容)
答案 1 :(得分:1)
如果您正在寻找排名,请使用:
SELECT @rownum := @rownum + 1 AS num,
t.country, t.clicks
FROM countryTable t,
(SELECT @rownum := 0) r
ORDER BY t.clicks DESC
<强>结果强>
| NUM | COUNTRY | CLICKS | -------------------------- | 1 | 175 | 1000 | | 2 | 45 | 650 | | 3 | 0 | 222 | | 4 | 66 | 34 |
答案 2 :(得分:0)
@PutraKg我想你可以关闭这个问题,因为我在这篇文章中回答了MYSQL does not return result in PHP when asked for the first ranking only; - )