我在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))
答案 0 :(得分:1)
如果你想在MySQL查询中完成它,那么它实际上比它的价值更麻烦。首先,语法非常简单(我记得)在每个分组的顶部列出了一个组名。并且结果仍然被视为行,因此组名称将被视为一行,其他所有列都为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的设置是因为它们不匹配的唯一时间是当你在一个新的组上,因此想要打印某种类型的标题时。
答案 1 :(得分:0)
while($data = mysql_fetch_assoc($result)){
if($data['product_groups.name'] != $groupname){
echo "Groupname: ".$data['product_groups.name']."<br />";
$groupname = $data['product_groups.name'];
}
echo "ID: ".$data['products.id']."<br />";
echo "Name: ".$data['products.name']."<br />";
}
也许你可以这样做!?