2017-05-17 11 views
0

votes列を含むテーブルをとり、1位、2位、3位などとランク付けするこのクエリがあります。私はを使用すると、偶数にスキップするか、HAVING rank <= 6を使用する場合は次の番号にバンプするように見えますが、上位3項目までランクを制限したいと思います。エイリアスから特定の番号をスキップしています

SELECT `category`, 
     `year`, 
     `month`, `votes`, 
     @prev := @curr, 
     @curr := `votes`, 
     @rank := IF(@prev = @curr, @rank, @rank + @i) AS `rank`, 
     IF(@prev <> `votes`, @i:=1, @i:= @i+1) AS `counter` 
FROM `photo_contest` 
CROSS JOIN (SELECT @curr := null, @prev := null, @rank := 1, @i := 0) `tmp_tbl` 
WHERE `category` = 'World Up Close' 
    AND `year` = '2017' 
    AND `month` = 'April' 
    AND `votes` > 0 
HAVING `rank` <= 3 
ORDER BY `votes` DESC 

それが現在実行しているサーバーよりもはるかに古いMySQLライブラリ(5.1.73)を使用していますように、それは(5.6.35)当社のサーバーのPHPのインストールに問題がある可能性がありますが、私はわかりません。同様のクエリを使用して以前の質問に問題がありました。

+0

「LIMIT 3」 – mxr7350

答えて

0

HAVINGGROUP BYと一緒に使用します。この場合、HAVINGなしでサブクエリを使用する必要があります。

SELECT * 
FROM (SELECT <your query> ORDER BY `votes` DESC) as T 
WHERE rank <= 3 
関連する問題