MySQL:每个分组只打印一次数据

时间:2009-07-23 09:55:04

标签: php sql mysql

我在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))

2 个答案:

答案 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 />";
}

也许你可以这样做!?