Doublons dans requête
Bonjour à toutes et à tous.
Je cherche à afficher des données provenant de 4 tables.
Une table 'prix_menu", une table 'menus' , une table 'categories' et une table 'plats'.
Ceci pour afficher des menus issus de la carte d'un restaurant.
Voici mon code
[CODE]
$resultat = mysql_query("SELECT * FROM menus INNER JOIN categories ON menus.IDCat = categories.IDCat INNER JOIN plats ON menus.IDPlat = plats.IDPlat AND menus.IDTypeMenu = $VarTypeMenu AND menus.NumMenu = $numeromenu ORDER BY categories.OrdreCat");
while ($ligne = mysql_fetch_array($resultat)) { // Affichage de la catégorie du plat echo($ligne["Categorie"]." au choix"); echo ""; // Affichage du plat echo($ligne["Plat"]); echo ""; }
[/CODE]
Le problème est que la catégorie s'affiche avant chaque ligne, ce qui donne :
Entrées au choix Ficelle Picarde Entrées au choix Salami Entrées au choix Jambon Sec Plats au choix Rôti de Boeuf Plats au choix Aile de Raie Desserts au choix Tarte Aux Pommes Maison Desserts au choix Crème Caramel
Comment faire pour n'avoir qu'une fois les catégories ?
Merci pour vos réponses éclairées.
Cordialement
Réponses apportées à cette discussion
Salut,
Tu peux essayer ceci :
<?php
$sql = 'SELECT Categorie, Plat FROM menus';
$sql.= ' LEFT JOIN categories ON menus.IDCat = categories.IDCat';
$sql.= ' LEFT JOIN plats ON menus.IDPlat = plats.IDPlat';
$sql.= ' WHERE menus.IDTypeMenu = %d AND menus.NumMenu = %d';
$sql.= ' GROUP BY plats.IDPlat ORDER BY categories.OrdreCat ASC';
$sql = sprintf($sql, intval($VarTypeMenu), intval($numeromenu));
$resultat = mysql_query($sql);
if((false !== $resultat) && (mysql_num_rows($resultat)>0)) {
$categorie = '';
while($ligne = mysql_fetch_assoc($resultat)) {
if($categorie !== $ligne['Categorie']) {
$categorie = $ligne['Categorie'];
echo htmlspecialchars($categorie),'<br/>';
}
echo htmlspecialchars($ligne['Plat']),'<br/>';
}
} else {
echo 'Aucun résultat';
}
?>
++
Rolala sprintf+ intval ? Moi j'aurais testé la variable, si c'est pas numerique (is_numeric()), je ne fais pas la requête!
@Palleas : is_numeri() vérifie qu'une chaine a le format d'un nombre entier ou à virgule. Pour faire propre, il vaut mieux utiliser ctype_digit() qui contrôle bien que l'on ait un format d'un nombre entier. Et à ce moment, plus la pleine d'utiliser le intval().