我正在使用 PHP/MySQL 进行编码,并使用以下查询来获取产品和产品组数据:
SELECT products.id,products.name,product_groups.id,product_groups.name
FROM products
INNER JOIN product_groups
ON products.id=product_groups.id
WHERE products.name LIKE '%foobar%'
ORDER by product_groups.id ASC
因此,此查询会获取产品并按产品组对它们进行排序。我想要的是为每个产品分组仅显示一次product_groups.name。所以即使我有十个鞋子产品,组名“鞋子”也只显示一次。
我使用以下 PHP 来打印结果:
while ($data = mysql_fetch_array($result))
最佳答案
如果你想在 MySQL 查询中完成它,老实说,这比它的值(value)更麻烦。首先,在每个分组的顶部列出组名的语法确实很奇怪(我记得)。结果仍然被视为行,因此组名称将被视为一行,所有其他列均为 Null,因此您不会在 PHP 脚本中真正节省任何时间或精力,因为它必须执行 if 语句捕获何时命中组名称而不是组数据。
如果您希望通过 PHP while 循环来完成它,Johan 是正确的选择。对于类似的情况,我使用以下方法:
$result = $sql->query($query);
$prev_group = "";
while($data = $result->fetch_assoc()){
$curr_group = $data['group'];
if ($curr_group !== $prev_group) {
echo "<h1>$curr_group</h1>";
$prev_group = $curr_group;
}
else {
echo $data;
.....
}
显然,回显数据将被设置为按照您想要的方式回显部分数据。但是 $prev_group/$curr_group 的设置是这样,它们唯一不匹配的情况是当您位于新组中并因此想要打印某种类型的标题时。
关于php - MySQL:为每个分组仅打印一次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170732/