0

私は次のtableCountryを持っています

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

そして、次のMYSQLステートメントを使用して、クリック数の列に基づいて任意の国のランキングを取得します(1つの結果のみ)

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'];

ただし、国が1位の場合、これは結果を返しません。つまり、a.country = 175

4

3 に答える 3

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 に答える
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 に答える
0

@PutraKg この投稿で答えたので、この質問を閉じることができると思います。最初のランキングのみを求められた場合、MYSQL は PHP で結果を返しません;-)

于 2013-01-13T17:54:31.333 に答える