SQL限制组数

时间:2013-02-25 21:30:05

标签: mysql sql

我正在尝试创建一个简单的分页但似乎无法limit结果的数量。

SELECT * FROM visits GROUP by clientID ORDER BY 'date' LIMIT $from, $to

我想只获得每个客户的第一次访问(按时间顺序排列)并对结果进行分页。

如果我使用$ from = 6,$ to = 12进行此查询,则返回8行而不是7行。

我做错了什么?

4 个答案:

答案 0 :(得分:6)

来自MySQL的LIMIT子句

上的文档
  

LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量(使用预准备语句时除外)。

     

使用两个参数,第一个参数指定要返回的第一个行的偏移量,秒指定 最大值要返回的行数。初始行的偏移量为0(不是1)。

当您选择$from为6而$to为12时;你不是从6到12选择;从<{1}} = 7开始,您将选择 12行。

答案 1 :(得分:2)

LIMIT子句的第一个参数是起始偏移量,第二个参数是要返回的行数。 因此,您的查询应该是:

... LIMIT $from, ($to - $from)

答案 2 :(得分:2)

使用您正在使用的dbms和语法,限制表达式中的第二个数字是允许的结果数,而不是偏移端点。因此,您从6开始并允许接下来的12个结果,而不是获得结果6-12。

如果您想获得结果6-12,请使用limit 5,7

答案 3 :(得分:1)

您的查询按日期返回首次访问。为此,您需要实际加入此信息:

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(mis)功能,其中select子句中的列不在group by子句中,并且不是聚合函数的参数。