另一个嵌套循环php+mysql查询

ikfrs5lh  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(338)

我已经搜索了几个小时,阅读了大量关于foreach循环和while循环的问答,寻找我问题的答案,但还没有找到一个类似我的问题的答案。主要是分类菜单。。。
我有一个像这样的mysql表设置

cat | product | link  | status
1   | milk    | https | in stock
1   | eggs    | https | in stock
2   | butter  | https | out of stock
2   | bread   | https | in stock
3   | bananas | https | in stock

并将数据分组到一个php循环表中,如下所示;

Category 1
 milk    | https | in stock
 eggs    | https | in stock
         Category 2
 butter  | https | out of stock
 bread   | https | in stock
         Category 3
 bananas | https | in stock

我需要什么样的嵌套循环?我需要在嵌套循环中调用第二个mysqli查询吗 cat ?
谢谢:)
php代码添加编辑

$stmt = $con->prepare("SELECT * FROM wp_products ORDER BY cat");
$stmt->execute();

$results = $stmt->get_result();
echo "<p><center><h4>Master List</h4></center></p>";
echo "<table>
<tr>
<th>Product</th>
<th>Link</th>
<th>Status</th>
</tr>";
if (mysqli_num_rows($results)>0){
while($row = $results->fetch_assoc())
{
  echo "<tr><td>" . $row['product'] ."</td>";
  echo "<td>". $row['link'] ."</td>;
  echo "<td>". $row['status'] ."</td></tr>";
}
}
echo "</table>";
yrwegjxp

yrwegjxp1#

大体上是这样的。
这个想法是
按类别对行排序[你已经完成了这一部分。]
用默认值声明类别。
如果有任何更改,请使用新的类别值更新类别值[在排序时,默认情况下,它将始终分组。]
代码是这样的。

<?php

$stmt = $con->prepare("SELECT * FROM wp_products ORDER BY cat");
$stmt->execute();

$category = '';  # Default value for category. 

$results = $stmt->get_result();
echo "<p><center><h4>Master List</h4></center></p>";
echo "<table>
<tr>
<th>Product</th>
<th>Link</th>
<th>Status</th>
</tr>";
if (mysqli_num_rows($results) > 0) {
   while ($row = $results->fetch_assoc()) {

      # Category will be updated in this query 
      if($category != $row['cat']) { 
         $category = $row['cat']; 
         echo '<tr><td colspan="3"> Category ' . $category .' </td></tr>'; 
      }

      echo "<tr><td>" . $row['product'] . "</td>";
      echo "<td>" . $row['link'] . "</td>";
      echo "<td>" . $row['status'] . "</td></tr>";
   }
}
echo "</table>";

检查:)

9w11ddsr

9w11ddsr2#

没有代码包括,因为你没有提供任何开始,但这个概念是健全的imho。
选择最高的 cat 在数据库中 SELECT MAX(cat) FROM ... 从1循环到最高点 cat . 在每个循环中,选择与当前循环索引匹配的条目 SELECT cat,product,link,status FROM ... .
在结果上循环(foreach在这里使用db results)并构建`

<table>
  <theader>
    <tr><th colspan="3">Category $loopindex</th><tr>
  </theader>
  <tbody>
    <tr>
      <td>$result[product]</td>
      <td>$result[link]</td>
      <td>$result[status]</td>
    </tr>
  </tbody>
</table>

循环索引增加+1
转到下一个类别
有很多细节需要解决(正确的php/html代码、表的css、如何使用php访问db等等),但原则是可以的。
好的,你在我的答案后面加了代码。
问题在于 SELECT * 你一次就可以拿到整张table。对于小型数据库来说,这是可以的,但这是一个应该避免的习惯。总有一天你会得到大数据集(或者这个数据集会增长)。
此外,您还必须循环浏览所有结果,并找出每个结果所指向的表。您必须将其存储在数组(?)中,然后从这些数组输出您的html表代码?
你的 ORDER BY 结果中未列出值(按名称)。
如果你做了你的决定 ORDER BY cat ,至少您知道每个条目都是正确的输出顺序 <table> HTML直接到页面,中间没有一些缓冲机制。
这样,每次看到一个新的cat值时,就可以启动一个新表,或者添加一个 <tr><td colspan="3">Category 1</td></tr> 分隔线。
回复关于类别上循环的评论。
假设下表:

name product link status
 1   p1      l1    s1
 2   p2      l2    s2
 1   p3      l3    s3
 1   p4      l4    s4

查询 SELECT cat,product,link,status FROM table ORDER BY cat,product 将为您提供以下结果集:

1,p1,l1,s1
1,p3,l3,s3
1,p4,l4,s3
2,p2,l2,s2

因此,您可以循环这些结果,一次一行。每个循环必须保持 cat 下一个循环的值。如果它发生了变化,您可以在这里放置一个标题来标识类别。然后继续打印行,直到它们全部完成,或直到找到一个新的类别。不停地。

相关问题