2014-09-28 42 views
0

考慮下面的查詢 -如何從結果查詢中排除第一行?

SELECT * FROM GAME_LIST WHERE 
    genre  = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR 
    publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm') 
    ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC 

此查詢將產生的行數從GAME_LIST表。對於示例 -

A - 123 - W 
B - 235 - R 
C - 323 - R 
D - 146 - R 
E - 167 - W 
F - 189 - W 
G - 165 - R 

但我不希望包括(在這種情況下A - 123 - W)的第一行。
如何在現有的查詢中實現此目的?

回答

1

使用limitoffset能力。在MySQL中,這往往會被寫爲:

ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC 
    LIMIT 1, 9999999 

第二個參數僅僅是一個很大的數字,以確保你得到你想要的所有行。

這也可以被寫爲:

LIMIT 99999999 OFFSET 1 

OFFSET計數在0開始用於第一行,所以1跳過第一行,開始於第二個。

+0

真棒!我是mysql中的新手,你的解釋有助於我理解事實。謝謝! – 2014-09-28 14:12:13

0

使用以下命令:

SELECT * FROM GAME_LIST WHERE 
    genre  = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR 
    publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm') 
    ORDER BY CASE WHEN name LIKE '%$searchTerm%' then 1 else 2 end, points DESC 
    LIMIT 2, ( SELECT * FROM GAME_LIST WHERE 
    genre  = (SELECT Genre FROM GAME_LIST WHERE name='$searchTerm') OR 
    publisher = (SELECT Publisher FROM GAME_LIST WHERE name='$searchTerm')) 
相關問題