我正在尝试限制已选定的查询。我知道我可以直接在查询选择中执行,但是由于代码的某些逻辑,如果这样做,我必须运行两次查询选择,这(我相信)会增加计算时间!所以,我想说的是:
$query1 = $mysqli->query("SELECT * FROM tableName WHERE someconditions");
然后,我需要为分页重新选择$query1的子选项。我想做的是这样的事情;
$query2 = LIMIT($query1, $limit_bigin, $limit_end);
哪里 $limit_bigin
, $limit_end
提供限制范围(分别为起点和终点)。
有人能告诉我怎么做吗?
p、 我知道我可以直接做到:
$query1 = $mysqli->query("SELECT * FROM tableName WHERE someconditions");
$query2 = $mysqli->query("SELECT * FROM tableName WHERE someConditions LIMIT $limit_bigin, $limit_end");
但是这会运行两次查询并减慢进程(由于程序的某些逻辑,我必须无限制地运行第一个查询)
根据我在php中尝试使用array\u slice的答案编辑1。但是,由于查询是一个对象,因此它不会给出预期的结果。空值是窗体的结果
array_slice($query1, $start, $length, FALSE)
1条答案
按热度按时间2ledvvac1#
如果您已经执行了查询,并且结果集已经返回到您的php中,那么您就不能这样做
LIMIT
是的。如您所述,然后对同一查询的子部分运行第二个sql执行是浪费和重复的。不要重复你自己的话。
干燥。
如上所述,重复会导致可维护性问题,因为您很容易忘记重复,调整一个sql而忘记调整另一个sql。
不要重复你自己的话。
干燥。
改用php
一旦执行了查询,结果集就会传回php。
所以假设你有
$var
使用sql查询的内容,您只需要从$var
,而不是从数据库[再次]。您可以使用php的许多数组函数来实现这一点。尤其
array_slice()
.所以;
现在,选择第二页,例如第10到20行:
这将“切片”你想要的数组部分。请记住,数组计数将从零开始,因此要获取第10行(从1开始的索引,典型的mysql自动递增主键),则需要从第(10-1)行中选择x行数。
请同时阅读php手册
array_slice()
.进一步
如注解中所述,不能保证您的sql每次以相同的顺序返回相同的值,因此强烈建议您对结果进行排序:
示例数据:
然后你可以在一个
foreach
或者其他标准的阵列操作技术。