Doublons dans requête

Rechercher

Doublons dans requête

Par Elastic77  -  3 reponses  -  Le 29/05/2008 14:34  -  Editer  - 

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

Par Emacs  -  Le 29/05/2008 19:09  -  Haut de page  - 

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';
}
?>

++

 
Par Palleas  -  Le 30/05/2008 10:01  -  Haut de page  - 

Rolala sprintf+ intval ? Moi j'aurais testé la variable, si c'est pas numerique (is_numeric()), je ne fais pas la requête!

 
Par Emacs  -  Le 30/05/2008 12:38  -  Haut de page  - 

@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().

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |