我正在嘗試創建一個簡單的分頁,但它似乎無法獲得結果的數目limit
。SQL限制組的數量
SELECT * FROM visits GROUP by clientID ORDER BY 'date' LIMIT $from, $to
我只想得到每個客戶端的第一次訪問(按時間順序),並對結果進行分頁。
如果我就與這個$查詢從= 6,$爲= 12返回像8行,而不是7
我做錯了什麼?
我正在嘗試創建一個簡單的分頁,但它似乎無法獲得結果的數目limit
。SQL限制組的數量
SELECT * FROM visits GROUP by clientID ORDER BY 'date' LIMIT $from, $to
我只想得到每個客戶端的第一次訪問(按時間順序),並對結果進行分頁。
如果我就與這個$查詢從= 6,$爲= 12返回像8行,而不是7
我做錯了什麼?
從MySQL的文檔上LIMIT
條款
LIMIT子句可以被用來限制SELECT語句返回的行數。 LIMIT需要一個或兩個數字參數,它們都必須是非負整數常量(除了使用預準備語句時)。
隨着兩個參數,第一個參數指定的第一行的偏移量返回,並且秒指定行的最大數目返回。初始行的偏移量是0(不是1)。
當您選擇$from
爲6和$to
爲12;你沒有選擇從6到12;你會選擇行,從$from + 1
= 7
我的整個生活都是一個謊言:( – Cristy 2013-02-25 21:43:11
@Cristy今天我有一個類似的經歷,但積分雖然!:P – hjpotter92 2013-02-25 21:43:53
LIMIT cluase的第一個參數是起始偏移量,第二個參數是要返回的行數。 因此您的查詢應該是:
... LIMIT $from, ($to - $from)
與DBMS和你正在使用的語法,在限制言論自由的第二個數字是允許的,不能抵消終點結果的數量。所以你從6開始,允許接下來的12個結果,而不是6-12的結果。
如果你想要得到的結果6-12,使用limit 5,7
開始您的查詢不不返回日期的首次訪問。要做到這一點,你需要真正加入這些信息:
select v.*
from visits v join
(select clientid, MIN(date) as mindate
from visits
group by clientid
) vd
on v.clientid = vd.clientid and v.date = vd.date
order by clientid
limit $from - 1, $to - $from
您最初的查詢返回關於給定客戶端的任意一組列。這些列甚至不保證來自相同的記錄。這是因爲您正在使用MySQL(錯誤)功能,您可以在select
子句中包含不在group by
子句中的列,而不是聚合函數的參數。
哦,但它似乎工作正常。 – Cristy 2013-02-25 22:04:41
如果列出DBMS和版本,它可能會有所幫助。 – 2013-02-25 21:32:33
MySQL ver 5.5.24 – Cristy 2013-02-25 21:33:13