从特定行开始mysqli_fetch_array

时间:2018-11-07 16:59:21

标签: php mysqli

我有一些记录,我使用while($row = $result->fetch_assoc()对每个记录进行迭代,然后使用while($row2 = $result2->fetch_assoc()从不同的表中获取其他数据,即也对每个记录进行迭代它们,然后在HTML表格中显示:第一个表格数据的一部分和第二个表格数据的一部分。

但是,当我截断第一个表然后插入新记录时,第二个查询$result2->fetch_assoc()从表的开头开始,并迭代X次,这基本上是第一个表的行数。这不是我想要的,我想记住其表(表2)中迭代的最后一个位置,然后再次调用时,仅迭代第二个表中的 remain 行,始终是取决于第一个表的第 n 次。

我在stackoverflow中找到了一个答案,您可以find it here,但是我不正确地理解它:如何保存最后的LIMIT值,所以如果$result2->fetch_assoc()从X id开始又被叫了吗?

我曾考虑过将一个计数器存储在文本文档中(该计数器首先在while循环中递增),然后从该特定数字中使用LIMIT,但是我真的不知道如何使它工作。

编辑:这是一些其他信息:

表“ aplikimet”模式:

first table schema

表“ aplikimet_2”架构:

second table schema

$sql = "SELECT id, emri, mbiemri, email, telefoni, vendbanimi, datelindja, mesazhi FROM aplikimet";
$sql2 = "SELECT statusi, uid FROM aplikimet_2";
$result = $conn->query($sql);
$result2 = $conn->query($sql2);
if (($result->num_rows > 0) AND ($result2->num_rows>0)){
(html table and th are here)
 while((($row = $result->fetch_assoc()) AND $row2 = $result2->fetch_assoc()){
  (html td are here)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

每次调用fetch_assoc()时,内部指针都会增加。 在最后一个元素之后,调用返回false,因此您的while(...)循环将结束。

要重置它,您可以致电

mysqli_data_seek($result, 0);

$result->data_seek(0);

请参阅here

恕我直言,这不是一个很好的方法。 如果要多次循环同一行集,则可以在第一个完整循环之后将其保存在数组中。然后在您需要的所有时间foreach()遍历您的数组(此时您的连接可能已经关闭)

要限制查询返回的行数,请使用SQL LIMIT子句,根据您使用的RDBMS,子句的语法可能不同。