【问题标题】:mysqli_multi_query - Separate results into columnsmysqli_multi_query - 将结果分成列
【发布时间】:2020-12-03 21:50:54
【问题描述】:

我有七个正在使用 mysqli_multi_query 函数执行的 SQL 查询:

if (mysqli_multi_query($conn, $airlinesql)) {
  do {
    if ($result = mysqli_store_result($conn)) {
      while ($row = mysqli_fetch_row($result)) {
        HELP!!
      }
      mysqli_free_result($result);
    }
  } while (mysqli_next_result($conn));
}
//Build and fill HTML table
HELP!!

七个查询中的每一个查询每行只返回一个元素,但每个查询返回的行数 是未知的 - 甚至可能为 NULL。我希望每个查询结果都在 HTML 表中填充自己单独的 column。换句话说,第一个查询可能返回 5 行,每行只有一个元素。我希望这 5 个元素中的每一个都进入 HTML 表的第一列中自己的行。第二个查询结果可能返回 1 个元素。此元素应位于 second 列的第 1 行。等等。虽然每个查询返回的行数未知(甚至可能为空),但列数固定为 7(因为这是查询数)。我猜将所有结果扔到数组中是正确的想法,但我无法弄清楚如何使用 while/for 循环从数组中构建表,因为您通常按行构建,而我的想法是按列构建由于每个查询返回的行数未知。或者,也许有比使用 mysqli_multi_query 更好的方法?感谢您的帮助。

【问题讨论】:

  • 是的,首先将这些数据放入一个多维数组中,然后确定“最大”查询返回的最大结果数是多少——这就是您要创建的表行数。所以使用一个简单的for 循环,然后在另一个for 循环中使用七列。然后只需使用 isset 检查数组是否在相应位置包含条目 - 如果是,则将该值作为表格单元格内容输出,否则为 - 或什么都没有。
  • 我认为最重要的问题是为什么你需要使用mysqli_multi_query?有什么办法可以避免这种情况吗?你可以使用普通的mysqli查询吗?你能用 PDO 代替吗?
  • 我有点期待在你的 sn-p 中看到mysqli_more_results() 像这样:stackoverflow.com/a/22469722/2943403 我曾经认为多查询功能很可爱——现在我从来没有看到调用它有什么好处。对我个人来说,这只是一时的时尚。我们可以看看你的 7 个 sql 字符串吗?您是否只需要使用UNIONs 进行一次查询?
  • @mickmackusa 我认为你不需要mysqli_more_results(),但我同意这个功能太麻烦了,没有理由使用它。

标签: php mysql mysqli html-table mysqli-multi-query


【解决方案1】:

接受 CBroes 的建议。我知道……这很丑陋,而且可能效率极低,但它可以工作。谢谢你的帮助。我最后一次进行任何编码是在 1992 年使用 FORTRAN,所以我需要我能得到的所有帮助!

  $alldata = array();
  $colno = 0;
  $rowcount = 0;
  // Execute multi query
if (mysqli_multi_query($conn, $sql)) {
  do {
    if ($result = mysqli_store_result($conn)) {
      $rowno = 0;
      while ($row = mysqli_fetch_row($result)) {
        foreach ($row as $value) {
          $alldata[$rowno][$colno] = $value;
          $rowno++;
        }
        //count rows in current pass; keep highest value
        if ($rowno > $rowcount) {
          $rowcount = $rowno;
        }
      }
      $colno++;
      mysqli_free_result($result);
    }
  } while (mysqli_next_result($conn));
}
//dump array into table
$outputtable .= "<table>";
for ($i = 0; $i <= $rowcount-1; $i++) {
  $outputtable .= "<tr>";
  for ($j = 0; $j <= $colcount; $j++) {
    if (isset($alldata[$i][$j])) {
      $outputtable .= "<td>" . $alldata[$i][$j] . "</td>";
    }
    $outputtable .= "</tr>";
  }
}    
$outputtable .= "</table>";
echo $outputtable;

【讨论】:

  • 您为什么不费心编辑您的问题以包含 7 个查询?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多