2009-07-23 6 views
0

Je codage en PHP/MySQL et ont la requête suivante pour chercher des produits et des données de groupe de produits:MySQL: les données d'impression juste une fois pour chaque groupe

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 

Donc cette requête récupère eux des produits et des commandes par produit groupe. Ce que je voudrais, c'est afficher product_groups.name une seule fois pour chaque groupe de produits. Donc, même si j'ai dix produits de chaussures, le nom de groupe "Chaussures" n'est affiché qu'une seule fois.

J'utilise le PHP ci-dessous pour imprimer les résultats:

while ($data = mysql_fetch_array($result)) 

Répondre

1

Si vous voulez que cela soit fait dans la requête MySQL, c'est franchement plus de problèmes que ça en vaut la peine. Pour l'un, la syntaxe est vraiment bizarre (si je me souviens bien) pour avoir un nom de groupe répertorié en haut de chaque groupe. Et les résultats sont toujours traités comme des lignes, donc le nom du groupe sera traité comme une ligne avec toutes les autres colonnes comme Null, donc vous n'économiserez pas vraiment le temps ou l'effort dans le script PHP comme il doit faire une instruction if attraper quand il frappe un nom de groupe au lieu des données de groupe.

Si vous voulez que cela soit fait par la boucle PHP, Johan est sur la bonne voie. J'utilise ce qui suit pour une situation similaire:

$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; 
     ..... 
    } 

Il est évident que les données d'écho seraient mis en place pour faire écho aux parties des données comme vous le souhaitez. Mais le $ prev_group/$ curr_group est configuré de sorte que la seule fois où ils ne correspondent pas est quand vous êtes sur un nouveau groupe et que vous voulez imprimer un en-tête quelconque.

+0

oui ... ma réponse ferait écho à – codemonkey

+0

d'anthony Cela a fonctionné comme promis. Merci, Anthony! –

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

Peut-être que vous pouvez faire comme ça !?

Questions connexes