我已经搜索了几个小时,阅读了大量关于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>";
2条答案
按热度按时间yrwegjxp1#
大体上是这样的。
这个想法是
按类别对行排序[你已经完成了这一部分。]
用默认值声明类别。
如果有任何更改,请使用新的类别值更新类别值[在排序时,默认情况下,它将始终分组。]
代码是这样的。
检查:)
9w11ddsr2#
没有代码包括,因为你没有提供任何开始,但这个概念是健全的imho。
选择最高的
cat
在数据库中SELECT MAX(cat) FROM ...
从1循环到最高点cat
. 在每个循环中,选择与当前循环索引匹配的条目SELECT cat,product,link,status FROM ...
.在结果上循环(foreach在这里使用db results)并构建`
循环索引增加+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>
分隔线。回复关于类别上循环的评论。
假设下表:
查询
SELECT cat,product,link,status FROM table ORDER BY cat,product
将为您提供以下结果集:因此,您可以循环这些结果,一次一行。每个循环必须保持
cat
下一个循环的值。如果它发生了变化,您可以在这里放置一个标题来标识类别。然后继续打印行,直到它们全部完成,或直到找到一个新的类别。不停地。