2011-06-02 54 views
1

我使用一个SQL语句来检索列表中的前5项:MySQL的:变量极限

SELECT ... FROM table ORDER BY someColumn DESC LIMIT 5 

结果会是这个样子:

Name  Count 
Person B 10 
Person D 8 
Person A 5 
Person E 5 
Person C 4 

如果有更多的结果与像列表中的第五项(例子中的4)一样的值,我也想向他们展示它们。有一种方法可以通过单个查询来实现吗?

所以我们可以说完全名单如下:

Name  Count 
Person B 10 
Person D 8 
Person A 5 
Person E 5 
Person C 4 
Person H 4 
Person I 4 
------------ 
Person G 3 
Person F 1 
Person J 1 

如何修改我的查询返回的前七个结果吗?显然我不能使用LIMIT 7WHERE Count >= 4,因为我事先不知道。

+0

你怎么不能使用LIMIT 7?使用限制100 – Ibu 2011-06-02 06:55:46

+0

当你的数据是'10,10,10,10,10,5,4,3,2,1'时会发生什么?你会显示count = 10的7行吗?或计数= 10 + 7行,计数在5和2之间的7行? – 2011-06-02 07:11:56

+0

@Salman:描述很明确。它会显示七个'10'。注意问题中的两个“5,5”。 – 2011-06-02 07:16:27

回答

5

你的意思是你想要的拳头五个结果,而且还包括第五名并列,一切其他的结果吗?一种解决方案是先获得第五个结果 - 使用子查询 - 然后得到你所需要的:

SELECT ... 
FROM table 
WHERE someColumn >= 
    (SELECT someColumn 
     FROM table 
     ORDER BY someColumn DESC 
     LIMIT 4, 1      <-- only the 5th 
    ) 
ORDER BY someColumn DESC 
+0

+1我写的是同一个,但你更快:) – 2011-06-02 07:10:15

+0

确切地说,谢谢! – martin 2011-06-02 09:51:33

0

两个解决方案:

溶胶1:使用LIMIT 100左右,并消除你的程序不需要的行。

溶胶2:执行两个查询,最probaby那将是更加昂贵:

SELECT * FROM (SELECT ... FROM table ORDER BY 
    someColumn DESC LIMIT 5) 
    UNION (SELECT ... FROM table ORDER BY 
     someColumn DESC LIMIT 50, 5);