2015-07-06 39 views
-2

我試圖建立一個人的目錄如LinkedIn選擇行有:MySQL的 - 在一個特定的順序

http://www.linkedin.com/directory/people-a

我不希望所有的行與name場開始a獲取和建立像LinkedIn這樣的鏈接列表。是否有MySQL的任何方式,所以我可以在這個序列中僅提取行:

月1日,第100,第101,第200,第201,第300,第301,第400,第401,最後

這意味着我試圖讓在包括第一個和最後一個項目的某個gap之後的兩個連續的行。 ID不是很好的統一增加順序,所以我不能使用這個answser。任何幫助或暗示表示讚賞。


說我的查詢SELECT * FROM企業where name like 'a%' order by name返回ID這樣的:

1,3,5,6,8,9,12,33,45,66,77,88,100,103,120,133,155,166,177,178,198

以上是如果我想獲得所有的行。但我想要的是在一定距離之後才能獲得物品。例如,如果我想每5個項目後挑:

1,9,12,88,100,166,177,198

所以跳過4項,並採取下兩個。這甚至可能在MySQL?

+0

你是否需要更多信息來改善此問題? – hassansin

+0

對於未來的訪客:請訪問此主題http://dba.stackexchange.com/questions/106079/sql-select-rows-in-a-certain-order/106105對於這些問題,dba似乎比SO好。 – hassansin

回答

0

,您可以訂購通過任何你想 創建一些函數,獲取一個數字並返回0,1(例如,你指定的所有數字將爲0),那麼你n通過這一行的排名來達到你的功能。

例如

select first_name,rank 
    from (
     SELECT first_name, 
       @curRank := @curRank + 1 AS rank 
      FROM person p, (SELECT @curRank := 0) r) x 
order by myfunc(x.rank); 

MYFUNC是你寫

,如果你想通過它只能獲得那些行,不只是排序,並讓他們

第一,你可以做以下的功能:

select first_name,rank 
from (
     SELECT first_name, 
       @curRank := @curRank + 1 AS rank 
      FROM person p, (SELECT @curRank := 0) r) x 
where rank in (1,100,101,102...) 
+0

感謝您的回答。問題是我事先不知道數字。他們可以根據我的查詢而有所不同。但我所知道的是每個數字之間還有100個我想要跳過的項目。 – hassansin

+0

我最終使用了一些與之相近的東西。 – hassansin

0

您可以選擇與限制條款

SELECT ...... LIMIT 0,99 

這將會給前100條記錄一系列

SELECT ...... LIMIT 100,199 

將給未來&等

+0

謝謝,我沒有試圖選擇項目的範圍。但只有相隔很遠的物品。 – hassansin