【问题标题】:Sorting in cakephp pagination with SR.NO instead of Database ID使用 SR.NO 而不是数据库 ID 在 cakephp 分页中排序
【发布时间】:2013-03-15 06:50:36
【问题描述】:

大家好,我有一个关于 cakephp 分页和排序的问题

我已将分页视图设置为流

SR.NO |姓名 |地址|电话|...

SR.NO 是 foreach 循环中的一个简单计数器,用于显示数据而不是数据库 ID

以下链接显示了我的 SR.NO 是如何创建的

CakePHP: Numbered Paginated Results

到目前为止一切都很好......

现在我需要根据 SR.NO 对结果进行排序,但不知道如何实现这一点...

给我一​​些光,谢谢...

【问题讨论】:

  • 如果您真的只是在谈论最多约 100 行,您可以尝试使用 javascript 表格排序器。
  • @Dave hmmm....可以做到...但也许对于更大的桌子我也必须遵循相同的模式,所以我需要一种蛋糕的方式来做到这一点...
  • 你通过像 $query = mysql_query("SELECT * FROM student"); 这样的简单查找查询来填充。 $number=mysql_num_rows($query);回声“学生表中的总记录=”。 $号码;并传入 serion no id,如果你愿意,你可以制作 CRUD。
  • @usii 这正是我所做的……但我的问题是按 SR.NO 对其进行排序……显示效果很好……

标签: cakephp sorting pagination cakephp-2.0


【解决方案1】:

如果我理解正确,S.NO 只是结果中的行号,并用 PHP 添加。

如果查询没有对结果进行排序,并且 S.NO 与数据库中的数据没有关系,则您不能对该列进行排序,并且这样做没有任何意义。

说明

没有“ORDER BY xxx”的 SQL 查询将按随机顺序返回结果; SQL Server UNION - What is the default ORDER BY Behaviour

基本上,这意味着每次运行查询时,结果可能会以不同的顺序返回。

您添加的 S.NO 基于查询返回结果的顺序,但由于此顺序是随机,因此每次查看同一页面时,same 记录可能会获得 另一个 位置,因此另一个 S.NO

选项

指定一个列来对结果进行排序,这样每次结果的顺序都是一致的。如果需要,您也可以反转排序顺序。 S.NO 仍然可以使用,但纯粹用于演示

或者,使用 SQL (Get row position in MYSQL query) 计算行位置。但是,即使在这种情况下,行号也是基于结果中每一行的位置。如果 no ORDER BY 存在,则行号仍然是“随机的”,并且每次执行查询时,同一行可能会获得不同的 S.NO/行号。

最后一个选项是使用 JavaScript 进行排序(正如其他人建议的那样)。 然而,同样因为“随机”顺序,这只能对页面上可见的记录进行。如果您使用分页(第 x 页,共 y 页),则对整个数据库表进行排序将需要对数据库进行新查询(由于整个“随机”问题而无法排序)

【讨论】:

  • 所以我想没有太多选择我会遵循选项 1。感谢这个简洁的解释......
  • 不客气,很抱歉我别无选择,但是的情况。除非数据库中有一个“真正的”S.NO,否则顺序只是随机的。您可能会考虑在数据库中存储计算的“S.NO”字段。但是,为此您还必须考虑“S.NO 订单的依据是什么?”
猜你喜欢
  • 2012-08-29
  • 2016-10-13
  • 2018-10-21
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多