2017-01-23 53 views
0

因此,我正在編寫一個應用程序以從數據庫中提取記錄,並且我的客戶詢問我是否可以按區域對數據進行排序。我有以下查詢:MySQL - 按整數排序時獲取更多記錄

SELECT 
    * 
FROM 
    customers 
WHERE 
    account_type != 'x' 
AND 
    account_type != 'tor' 
ORDER BY 
    area ASC, 
    id ASC 
LIMIT 30 

查詢返回30行數據價值,所有的1的面積值。

我有一個AJAX查詢設置來獲取另外30行,但是因爲我的區域訂貨數據,我無法只適合簡單的範圍字符串我的查詢如下圖所示的例子:

... 
AND 
    id > 30 
... 

我該如何編寫一個查詢來收集數據庫中的下30條記錄?

此外,還有一個面積值爲0的記錄。這不會顯示爲列表中的第一條記錄。爲什麼是這樣?我該如何解決這個問題?

感謝

+0

請提供樣品數據和預期產量。 – Wanderer

+1

如果您認爲添加'AND id> 30'是分頁的正確方法,那麼您開始時會犯錯。您使用LIMIT和OFFSET。 – CBroe

+1

_「此外,還有一個區域值爲0的記錄,這不會顯示爲列表中的第一條記錄。」_ - 是否爲「0」或是否爲「NULL」?這是完全不同的兩件事。 – CBroe

回答

1

首先,結合where條件爲單一not in

SELECT c.* 
FROM customers c 
WHERE account_type NOT IN ('x', 'tor') 
ORDER BY area ASC, id ASC 
LIMIT 30; 

然後,在下一個組,使用:

SELECT . . . 
OFFSET 30 
LIMIT 30 

這假定id的獨特之處桌子。這很重要,因爲這會使排序穩定。

1

MySQL的LIMIT一個可選的參數偏移量,所以你可以在一個參數發送,告訴那裏挑選你想

SELECT 
    * 
FROM 
    customers 
WHERE 
    account_type != 'x' 
AND 
    account_type != 'tor' 
ORDER BY 
    area ASC, 
    id ASC 
LIMIT 30, 30 

應該給你下一個30行從行30

開始的30個結果什麼時候開始