【问题标题】:PHP SQL PaginationPHP SQL 分页
【发布时间】:2012-02-24 22:11:59
【问题描述】:

我似乎无法从这个查询中得到想要的结果:

  SELECT * 
    FROM `messages` 
   WHERE `msgType` = '0' 
     AND `status` = '0' 
ORDER BY `dateSent` DESC LIMIT 20, 0 

基本上,我试图在每页显示 20 个结果,但此查询不返回任何内容。 (为了记录,数据库中所有实例的msgType和状态都为0)

编辑:删除 LIMIT 部分会给我结果,但不会像我想要的那样划分和分页

EDIT v2 LIMIT 后面应该跟 OFFSET、# OF RECORDS(我很笨)

【问题讨论】:

  • 你使用什么风格的 SQL?

标签: php sql mysql pagination


【解决方案1】:
LIMIT 20, 0  

意思是:从第21行开始,返回0行,所以你的答案是正确的。

你的意思是:

LIMIT 0, 20  

【讨论】:

  • 偏移量是从零开始的,但这就是这里的问题
  • 共有24条记录。当我做 LIMIT 1,20 它给我记录 23, 22, 21, 20....4
  • 你说得完全正确,我脑子里不知什么原因发生了一些碰撞,我会相应地编辑..
  • @st4ck0v3rfl0w:你不是第一个反向获取参数的人 - 我更喜欢这些问题而不是非规范化数据模型......
【解决方案2】:

尝试从 0 周围删除单引号?

【讨论】:

  • 大部分数据库都是在INT和string/VARCHAR之间进行隐式转换
【解决方案3】:

克苏鲁的回答让我记忆犹新——问题是 LIMIT 子句。

在 MySQL 中,当 LIMIT 接受两个参数时 - 第一个是偏移量,表示它从哪一行开始,第一行为零。所以:

LIMIT 20, 0

...将从第 21 行开始,并从该点返回...零行。

您需要颠倒这些值才能取回任何东西:

LIMIT 0, 20

...获取前 20 行。

【讨论】:

  • 我很笨。这是官方的。谢谢。
【解决方案4】:

取消限制后会得到什么结果?简化,即使查询已经很简单。将问题分解为多个部分。

  • 数据库中有多少行符合条件?
  • msgType 和 status 的数据类型是什么?
  • 取消限制后会发生什么?

【讨论】:

  • 所有行都符合条件。 msgType 和状态的数据类型是 varchar。当我删除限制时,它会按时间顺序提供从最新开始的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2017-10-30
  • 2015-02-17
相关资源
最近更新 更多