如何限制已选择的查询?

a5g8bdjr  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我正在尝试限制已选定的查询。我知道我可以直接在查询选择中执行,但是由于代码的某些逻辑,如果这样做,我必须运行两次查询选择,这(我相信)会增加计算时间!所以,我想说的是:

$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)
2ledvvac

2ledvvac1#

如果您已经执行了查询,并且结果集已经返回到您的php中,那么您就不能这样做 LIMIT 是的。如您所述,然后对同一查询的子部分运行第二个sql执行是浪费和重复的。
不要重复你自己的话。
干燥。
如上所述,重复会导致可维护性问题,因为您很容易忘记重复,调整一个sql而忘记调整另一个sql。
不要重复你自己的话。
干燥。

改用php

一旦执行了查询,结果集就会传回php。
所以假设你有 $var 使用sql查询的内容,您只需要从 $var ,而不是从数据库[再次]。
您可以使用php的许多数组函数来实现这一点。尤其 array_slice() .
所以;

$query1 = $mysqli->query("SELECT * FROM tableName  WHERE someconditions");

现在,选择第二页,例如第10到20行:

$query2 = array_slice($query1, (10-1), 10 );

这将“切片”你想要的数组部分。请记住,数组计数将从零开始,因此要获取第10行(从1开始的索引,典型的mysql自动递增主键),则需要从第(10-1)行中选择x行数。
请同时阅读php手册 array_slice() .

进一步

如注解中所述,不能保证您的sql每次以相同的顺序返回相同的值,因此强烈建议您对结果进行排序:

$query1 = $mysqli->query("SELECT * FROM tableName 
          WHERE someconditions ORDER BY primary_key_column");

示例数据:

$query1 = $mysqli->query("SELECT * FROM tableName  WHERE someconditions ORDER BY id");
/***
  $query1 = array {
          0 => array { 'id' => 1, 'user' => "Jim", 'colour' => "Blue" },
          1 => array { 'id' => 2, 'user' => "Bob", 'colour' => "Green" },
          2 => array { 'id' => 3, 'user' => "Tom", 'colour' => "Orange" },
          3 => array { 'id' => 4, 'user' => "Tim", 'colour' => "Yellow" },
          4 => array { 'id' => 5, 'user' => "Lee", 'colour' => "Red" },
          5 => array { 'id' => 6, 'user' => "Amy", 'colour' => "Black" }
   }  

***/

$page = 2;
$size = 3; // number per page.
$start = ($page - 1) * $size; //page number x number per page.

// Select the second page of 3 results.    
$query2 = array_slice($query1, $start, $size , FALSE);

/***
  $query2 = array {
          0 => array { 'id' => 4, 'user' => "Tim", 'colour' => "Yellow" },
          1 => array { 'id' => 5, 'user' => "Lee", 'colour' => "Red" },
          2 => array { 'id' => 6, 'user' => "Amy", 'colour' => "Black" }
   }  

***/

然后你可以在一个 foreach 或者其他标准的阵列操作技术。

相关问题