从别名

时间:2017-05-17 15:14:29

标签: php mysql

我有一个查询,它包含一个包含votes列的表,并将它们排在第1,第2,第3等等。我想将排名限制为前三项,但是当我使用HAVING时,如果我使用HAVING rank <= 6,它似乎会跳过偶数,甚至可以提升到下一个数字。

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

这可能是我们服务器的PHP安装的一个问题,因为它使用的是比现在运行的服务器(5.6.35)更旧的MySQL库(5.1.73),但我不确定。我使用类似的查询遇到了上一个问题的问题。

1 个答案:

答案 0 :(得分:0)

您将HAVINGGROUP BY一起使用。在这种情况下,您需要使用不带HAVING的子查询。

SELECT *
FROM ( SELECT <your query> ORDER BY `votes` DESC) as T
WHERE rank <= 3