【问题标题】:MYSQLI - Increment query WHERE value per runMYSQLI - 每次运行增量查询 WHERE 值
【发布时间】:2018-05-24 05:41:13
【问题描述】:

我正在寻找是否可以增加 $tid 每次加一,
所以是$tid = 1, 2, 3, 4, 5, etc...

$tid 将计算表格的行数,因此 $tid=1 将回显第 1 行信息,$tid=2 将回显第 2 行信息,依此类推。虽然我可能觉得这不是最好的解决方案,但如果有人可以提出一个更优选的替代方案来完成此操作,那就太好了。

TL:DR:我只想找到一种方法,我可以使用下面的代码示例循环遍历 s_id = $tid 所在的所有行

$tid = 1;

$query2 = "SELECT * FROM `SALE` 
 LEFT JOIN `SALE_ROW` 
   ON `SALE_ROW`.s_id=`SALE`.s_id 
 WHERE `SALE_ROW`.s_id = {$tid}";
$results2 = mysqli_query($dbconnection, $query2);
while ($row = mysqli_fetch_array($results2)) {

    echo '<div class="pphhold">';

    echo '<div class="pcdtstlye">Previous Details</div>';

    echo  '<div> s_id: ' . $row['s_id'] .'</div>';
    echo  '<div> p_id: ' . $row['p_id'] .'</div>';
    echo  '<div> sr_qty: ' . $row['sr_qty'] .'</div>';
    echo  '<div> s_total: ' . $row['s_total'] . '</div>';
    echo  '<div> s_date: ' . $row['s_date'] . '</div>';

    echo '</div>';

};

【问题讨论】:

  • 在循环内的 lat div 之后添加这个 $tid++ 。它将变量加一。
  • 你能解释一下大局吗?不清楚是否要从 1 到 N 运行 N 次查询,每次使用不同的条件。或者,如果您想要查询检索到的行数。或者别的什么。
  • 在最后一个 div 后面放 $tid++ 什么都没做
  • @Juan 使用这个联合多表查询,我只是想找到一种方法,可以循环遍历 s_id = $tid 的所有行
  • 查询有一个条件限制结果为SALE_ROW.s_id = $tid。该查询有效吗?我的意思是,在运行查询之后,在 while 循环中,您可以访问每个返回的行。

标签: php mysql mysqli auto-increment


【解决方案1】:

使用此函数获取行数

 $query2 = "SELECT * FROM `SALE` LEFT JOIN `SALE_ROW` ON `SALE_ROW`.s_id=`SALE`.s_id WHERE `SALE_ROW`.s_id = {$tid}";

$results2 = mysqli_query($dbconnection, $query2);
$count=mysqli_num_rows($results2);

现在计数有结果计数

从查询中获取计数值:

$result = mysqli_query($dbconnection,"select count(1) FROM table");
$row = mysqli_fetch_array($result);

$count = $row[0];

【讨论】:

  • 用户不要求计数,应该使用 MySQLs COUNT 来完成真正的计数,以避免必须获取所有行
  • 喜欢SELECT count(*) FROM table?
  • 这就是计数的意义;)
【解决方案2】:

在您的代码中,您在循环外执行 MySQL 查询。它将执行一次,然后您循环遍历结果。如果您想更改您的查询(我假设 $tid 是您的查询的一个参数)并且想要获取更改后的查询的输出,您必须再次执行该查询。如果您知道$tid 的所有可能值,它可以按以下方式工作:

$tids = [1, 2, 3];
foreach($tids as $tid) {
  $query2 = "SELECT * FROM `SALE` LEFT JOIN `SALE_ROW` ON `SALE_ROW`.s_id=`SALE`.s_id WHERE `SALE_ROW`.s_id = {$tid}";
  $results2 = mysqli_query($dbconnection, $query2);
  $row = mysqli_fetch_array($results2);

  echo '<div class="pphhold">';

  echo '<div class="pcdtstlye">Previous Details</div>';

  echo  '<div> s_id: ' . $row['s_id'] .'</div>';
  echo  '<div> p_id: ' . $row['p_id'] .'</div>';
  echo  '<div> sr_qty: ' . $row['sr_qty'] .'</div>';
  echo  '<div> s_total: ' . $row['s_total'] . '</div>';
  echo  '<div> s_date: ' . $row['s_date'] . '</div>';

  echo '</div>';
}

但这并不好,因为您必须多次执行查询。所以就用IN:

$tids = [1, 2, 3];
$query2 = "SELECT * FROM `SALE` LEFT JOIN `SALE_ROW` ON `SALE_ROW`.s_id=`SALE`.s_id WHERE `SALE_ROW`.s_id IN(" . implode(',', $tids) . ")";
$results2 = mysqli_query($dbconnection, $query2);
while($row = mysqli_fetch_array($results2)) {
  echo '<div class="pphhold">';

  echo '<div class="pcdtstlye">Previous Details</div>';

  echo  '<div> s_id: ' . $row['s_id'] .'</div>';
  echo  '<div> p_id: ' . $row['p_id'] .'</div>';
  echo  '<div> sr_qty: ' . $row['sr_qty'] .'</div>';
  echo  '<div> s_total: ' . $row['s_total'] . '</div>';
  echo  '<div> s_date: ' . $row['s_date'] . '</div>';

  echo '</div>';
}

【讨论】:

  • 这太棒了,正是我想要的,但是 $tids 是否可以连接到像 mysqli_num_rows 这样的能力,所以它是总行数而不是预定义的 3?
  • 如果您喜欢它,请点赞或接受它作为答案。 $tids 只是您选择的一组 ID。你可以在这个数组中输入你喜欢的任何内容,或者理解并重构解决方案
  • 不要太痛苦,但我可以看看如何使用 mysqli_num_rows,好吗?
  • 有什么用?你可以打电话给mysqli_num_rows($results2),但我不知道哪里需要
  • 所以我可以有 $tids = mysqli_num_rows($results2)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2013-08-05
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多