使用SR.NO而不是数据库ID对cakephp分页进行排序

时间:2013-03-13 17:20:03

标签: cakephp sorting pagination cakephp-2.0

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

我已将分页视图设置为流程

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

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

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

CakePHP: Numbered Paginated Results

到现在为止一切都很好......

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

感谢我的一些亮光......

1 个答案:

答案 0 :(得分:0)

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

如果查询对结果进行排序且S.NO与数据库中的数据无关,则无法对此列进行排序,和这样做没有任何意义。

解释

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

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

您要添加的S.NO是基于查询结果返回的顺序,但由于此顺序为 random ,因此每次查看同一页面时,< em>相同的记录可以获得另一个位置,因此另一个S.NO

选项

指定一列以对结果进行排序,以便每次结果的顺序一致。如果需要,您还可以反向排序顺序。 S.NO仍然可以使用,但纯粹用于演示

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

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