Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL/PHP-分页、排序_Php_Mysql - Fatal编程技术网

MySQL/PHP-分页、排序

MySQL/PHP-分页、排序,php,mysql,Php,Mysql,我正在尝试将用户提交的信息分页到目录中。起初我有这样的想法: /?页码=3,计数=20,排序=日期 $floor = ($page-1)*$count; $ceiling = $count; SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling $ceiling = $count; SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT

我正在尝试将用户提交的信息分页到目录中。起初我有这样的想法: /?页码=3,计数=20,排序=日期

$floor = ($page-1)*$count;
$ceiling = $count;
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling
$ceiling = $count;
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling
正如我所读到的,这是不好的,因为它将计算所有的结果,而不是停留在下限+上限

现在,我正试图通过对页面上最后一项进行分页来加快速度

/?最后日期=2012,计数=20,排序=日期

$floor = ($page-1)*$count;
$ceiling = $count;
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling
$ceiling = $count;
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling
但是,这样做不行吗?有些日期是一样的。为了便于讨论,让我们假设我不能使用更精确的时间戳。例如,按价格排序只能保留小数点后2位,而且肯定会有重叠


我能做些什么来让这项改进奏效,或者我应该回到我以前的查询吗?

为了使用这项功能,您必须在两个方向上按日期进行约束。如果每个日期范围太长,可以多页显示,否则,请选择整个日期集。缺点是页面大小有些随意,在某些情况下,翻阅结果可能需要更长的时间


这意味着您还必须首先对该日期范围进行计数,以便知道下一页是在该日期范围内还是在下一日期范围内。

我最后使用了我的第一个分页示例。

如果我理解得很好,我认为SQL语句中WHERE子句中的LIKE运算符应该会有所帮助。。。但我可能错了,你能详细说明到底错在哪里吗?

我觉得你的第一种方法不错。你能清楚为什么你说它错了吗?离题了,但我是否可以建议升级到使用Jquery进行分页。我同意@GustavoVargas,为什么你放弃了第一个实现?我同意挪威人的看法,您可能正在重写可以从框架中实现的功能。在MySQL中使用LIMIT关键字并不妨碍它读取前面的记录。例如:从my_表中选择*限制10000,20;这意味着MySQL仍将读取前10000条记录,并在生成我们想要的20条记录之前将其丢弃。因此,在对大型数据集进行分页时,较高的页码意味着较长的加载时间。