【发布时间】:2019-01-09 16:31:28
【问题描述】:
我正在尝试限制已选择的查询。我知道我可以直接在我的查询选择中执行此操作,但由于代码的某些逻辑,如果我这样做,我必须运行两次查询选择,这(我相信)会增加计算时间! 所以,我正在尝试的是:
$query1 = $mysqli->query("SELECT * FROM tableName WHERE someconditions");
然后,我需要为我的分页重新选择 $query1 的子选项。我正在尝试做的是这样的事情;
$query2 = LIMIT($query1, $limit_bigin, $limit_end);
其中$limit_bigin、$limit_end 提供 LIMITING 范围(分别为开始和结束)。
有人可以告诉我如何做到这一点吗?
附:我知道我可以直接通过:
$query1 = $mysqli->query("SELECT * FROM tableName WHERE someconditions");
$query2 = $mysqli->query("SELECT * FROM tableName WHERE someConditions LIMIT $limit_bigin, $limit_end");
但这会运行两次查询并减慢进程(由于程序的某些逻辑,我必须无限制地运行第一个查询)
编辑 1 根据我尝试在 PHP 中使用 array_slice 的答案。但是,由于 Query 是一个对象,它不会给出预期的结果。结果形式为 NULL
array_slice($query1, $start, $length, FALSE)
【问题讨论】:
-
如果你一定要先运行无限制查询,为什么不在PHP中进行限制呢?
-
如果您已经从数据库中获取了整个查询,为什么还需要通过某种分页再次获取它?只需使用您的 PHP 代码对其进行分页。
-
SQL 在定义上是无序的.. 使用
LIMIT而不使用ORDER BY是没有意义的,即使运行相同的查询两次也不能保证相同的结果。 . -
如果您从
$query1获取所有行,您可以使用array_slice()提取您感兴趣的行。否则您可以使用mysqli_stmt_data_seek()定位查询并读取您之后的行数。 -
如何使用 PHP 限制它?谢谢