2011-09-20 94 views
1

很抱歉,如果這個問題很混亂。MYSQL LIMIT。是否可以跳過某些行?

我繼承了一個已經建立了一個網站,所以我真的不能做任何事情過於激烈。

某個頁面上的MySQL查詢使用限制爲僅顯示這樣的相關條目:

comtitlesub.idcts = %s LIMIT 1,3 

跳過第一個記錄並顯示以下三個記錄。 我一直要求增加一個新的紀錄,這是很好的,但是這是創紀錄的7號記錄5和6是不應該顯示此頁面,以便更改查詢到:

comtitlesub.idcts = %s LIMIT 1,6 

顯示所有6記錄如你所料。

一個令人困惑的事情是,我已經改變了ID的每一個的記錄,以便我的新的ID 4,並且然而,這並不有所作爲。

是否有「跳過」不需要的記錄,還是我從錯誤的方向接近這一個簡單的方法?

+2

你不能進一步限制你的結果在'WHERE'子句嗎?:'WHERE comtitlesub.idcts =%s AND someothercol NOT IN(3,4,6,1)' –

+0

當然,你會想要使用在'WHERE'中具有穩定數據並且不依賴於可能改變的數字ID的列。 –

+0

@michael謝謝你,我會給出這個報告並回報 – Andrew

回答

2

添加「order by comtitlesub.idcts」在你查詢終端,但限制條款之前。

... comtitlesub.idcts = %s ORDER BY comtitlesub.idcts LIMIT 1,6 

基本上,改變id不重新排序,行存儲,以便他們已經創建,檢索默認的方式。

+0

這給了我相同的結果。但是由於某種原因我沒有考慮使用Order By,所以我要試驗。噢,謝謝你解釋爲什麼改變ID不起作用:) – Andrew

+0

當我使用ORDER BY areas.id(該查詢使用了兩個表)時,這個修正了它。我很想放鬆限制來做一些它不打算做的事情,我甚至沒有考慮這樣做。謝謝 – Andrew

+0

正如@Michael所說的那樣,做一些像'where id in(2,3,4,5,6)'或'(2至6)之間的id(現在已經重做了ID)真的會讓我們全部睡得好;) – roselan

1

安德魯,LIMIT將按照特定的順序劃定,在你的情況下,不約而同的默認順序比ID順序相同的,現在你已經改變了它,你將需要通過ID訂購:

ORDER BY comtitlesub.idcts 
+0

感謝您的答案。不敢相信我甚至沒有想過使用Order By! – Andrew

1

我認爲最簡單的辦法是修改WHERE子句排除您要排除的行。例如:

WHERE comtitlesub.idcts = %s AND someothercol NOT IN ('cat','frog','kazoo') 

理想的可維護性,你想someothercol保持穩定的數據,而不是這可能會爲你的應用程序數據的變化而變化一個數字ID。

+0

非常感謝您的時間。 ORDER BY示例爲我提供了我需要的「快速修復」。 – Andrew