Ich habe diese Abfrage, die eine Tabelle, die eine votes
-Spalte enthält und rangiert sie 1., 2., 3. und so weiter. Ich möchte die Ränge auf die Top 3 Elemente beschränken, aber wenn ich HAVING
benutze, scheint es über gerade Zahlen zu springen oder sogar zur nächsten Nummer zu springen, wenn ich HAVING rank <= 6
benutzen sollte.HABEN bestimmte Zahlen von einem Alias übersprungen
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
Es kann ein Problem mit unserem Server des PHP-Installation sein, da es eine viel ältere MySQL-Bibliothek (5.1.73) als der Server verwendet, die derzeit (5.6.35) ausgeführt wird, aber ich bin nicht sicher. Ich habe Probleme mit einer vorherigen Frage mit ähnlichen Abfragen gehabt.
Sie können versuchen, 'LIMIT 3' zu verwenden – mxr7350