2014-10-03 37 views
0
Database 1   Database 2 
||==============|| ||==============|| 
||user || value || ||user || value || 
||-----||-------|| ||-----||-------|| 
|| 1 || 50 || || 1 || 50 || 
|| 2 || 50 || || 2 || 50 || 
|| 3 || 50 || || 3 || 40 || 
|| 4 || 40 || || 4 || 40 || 
|| 5 || 40 || || 5 || 30 || 
|| 6 || 40 || || 6 || 20 || 
|| 7 || 40 || || 7 || 20 || 
|| 8 || 30 || || 8 || 10 || 
|| 9 || 30 || || 9 || 10 || 
||==============|| ||==============|| 

我需要搜索前5名最高值,而不是隻有5個結果我需要那些7個50和40值的用戶。如何獲得超過極限5的多個相同的輸出在SQL中的TOP 5值5

我不能忽視他們其他頂級用戶。 如果可能在SQL中完成,那將會很棒。如果不是的話,PHP的幫助就可以做到。

 Result 1    Result 1 
||==============|| ||==============|| 
||user || value || ||user || value || 
||-----||-------|| ||-----||-------|| 
|| 1 || 50 || || 1 || 50 || 
|| 2 || 50 || || 2 || 50 || 
|| 3 || 50 || || 3 || 50 || 
|| 4 || 40 || || 4 || 50 || 
|| 5 || 40 || || 5 || 50 || 
|| 6 || 40 || ||==============|| 
|| 7 || 40 || 
||==============||  
+1

我很困惑。你想要前5還是前7?從這個假設的查詢中顯示您的預期結果。 – wavemode 2014-10-03 01:04:56

+0

@wavemode他想要的是前5名加上領帶。 – Barmar 2014-10-03 01:17:24

+0

呵呵,原來只顯示數據庫1. – wavemode 2014-10-03 01:18:41

回答

1
SELECT user, value 
FROM Database 
WHERE value in (
    SELECT value 
    FROM Database 
    ORDER BY value DESC 
    LIMIT 5) 
) 
ORDER BY value DESC, user 

另一種方法是:

SELECT user, value 
FROM Database 
WHERE value >= (SELECT MIN(value) 
       FROM (SELECT value 
         FROM Database 
         ORDER BY value DESC 
         LIMIT 5) AS x 
       ) 
ORDER BY value DESC, user 
+0

謝謝..這一個很好。 – user2045458 2014-10-03 01:28:58

1

一般來說,對於一個給定的表,你可以這樣做:

SELECT t.* 
FROM table t CROSS JOIN 
    (SELECT t.* 
     FROM table t 
     ORDER BY value DESC 
     LIMIT 1 OFFSET 4 
    ) t5 
WHERE t.value >= t5.value; 

子查詢選擇第五行(OFFSET開始計數在0而不是1)。 where子句只是選擇大於該值的任何東西。

如果你想在兩個表上運行這個組合,那麼你會想要使用union all

+0

+1我在回答中沒有想到OFFSET選項。 – Barmar 2014-10-03 01:26:24