zanoni Posté 1 Mars 2005 Partager Posté 1 Mars 2005 Bonjour, Je n'arrive pas à afficher correctement le résultat de la requête suivante : $data = $db->Query('SELECT docid, doctitre, doctitreart, docanne, docedition, doclieued, autnom, autprenom FROM document D JOIN typedoc T ON D.typdocid = T.typdocid JOIN ecrire ON ecrdocid = docid JOIN auteur ON autid = ecrautid WHERE D.typdocid = "1"'); Mon code est le suivant : //Affichage des ouvrages généraux echo "\t\t\t<h2>I. OUVRAGES GENERAUX</h2>\n";//Déclaration du compteur$docid = 0;//on boucle sur l'ensemble des enregistrementswhile ($row =& $data->fetchRow(DB_FETCHMODE_ASSOC)){$nom = $row['autnom']; $prenom = $row['autprenom']; $titre = $row['doctitre']; $article = $row['doctitreart']; $edition = $row['docedition']; $lieu = $row['doclieued']; //Affichage de la date list($date, $time) = explode (" ", $row['docanne']); list($year, $month, $day) = explode ("-", $date); //Test sur la présence du prénom if ($prenom) { if ($docid == 0) { echo "\t\t\t\t<p>".strtoupper($nom)." (".$prenom{0}."), ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } if ($row['docid'] != $docid && $row['docid'] != 1) { echo "</p>\n"; echo "\t\t\t\t<p>".strtoupper($nom)." (".$prenom{0}."). ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } if ($row['docid'] == $docid) { echo " & ".strtoupper($nom)." (".$prenom{0}."). ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } } else { if ($docid == 0) { echo "\t\t\t\t<p>".strtoupper($nom).". ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } if ($row['docid'] != $docid && $row['docid'] <> 1) { echo "</p>\n"; echo "\t\t\t\t<p>".strtoupper($nom).". ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } if ($row['docid'] == $docid) { echo " & ".strtoupper($nom).". ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } } $docid = $row['docid']; } if ($docid) { echo "</p>\n"; } Lorsque j'ai qu'un auteur par document aucun problème. Exemple : REFF (T), R. Delaunay, Du Cubisme à l'Art Abstrait. Paris, , 1957. BRAME (P). Degas et son oeuvre, supplément, au catalogue raisonné. New York, , 1984. LANNES. La peine capitale. Paris, Ed. Denoël, 1942. VALLIER (D). Braque, l'oeuvre gravé. Paris, Flammarion, 1982. Mais lorsque qu'un doc à plusieurs auteurs, il y a doublement de l'ensemble des champs titre, lieu d'édition, date. Exemple : FRANCASTEL (P), R. Delaunay, Du Cubisme à l'Art Abstrait. Paris, , 1957. & REFF (T). R. Delaunay, Du Cubisme à l'Art Abstrait. Paris, , 1957. BRAME (P). Degas et son oeuvre, supplément, au catalogue raisonné. New York, , 1984. LANNES. La peine capitale. Paris, Ed. Denoël, 1942. VALLIER (D). Braque, l'oeuvre gravé. Paris, Flammarion, 1982. Comment empêcher le doublement de l'affichage des données ? Pourriez-vous m'indiquez une solution ? Merci d'avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rottman Posté 1 Mars 2005 Partager Posté 1 Mars 2005 Ca doit etre un problème de if,else,elseif, mais là c'est compliquer à comprendre le code sans explication... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 2 Mars 2005 Partager Posté 2 Mars 2005 Tu mélanges un peu les données, ce qui rend le code moins 'lisible'. Exemple : if ($docid == 0) En fait, ton $docid pourrait correspondre à l'id du doc en cours, alors que ca correspond à l'id du doc précédent. Dans ton code, il est fait mention du second doc de ton auteur : if ($row['docid'] == $docid) { echo " & ".strtoupper($nom)." (".$prenom{0}."). ".$titre.". ".$lieu.", ".$edition.", ".$year."."; } C'est cette ligne qui s'affiche. (si tu ne comprends pas ces lignes, elles signifient : Si le doc est le meme que 'celui que l'on vient d'afficher', alors l'afficher. Ce qui en fait 2 exemplaires.) Si tu supprimes ces lignes, les 2 docs ne s'afficheront plus. Nico. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 2 Mars 2005 Partager Posté 2 Mars 2005 Bonjour Zanoni, Tout simplement parce que pour gérer facilement les livres à plusieurs auteurs, il te faut une table croisée "livre_auteur" reprenant uniquement les champs "id_livre" et "id_auteur" .... C'est le schéma que j'ai retenu pour le site http://www.lisons.info , compare cette fiche sur New-York brûle-t-il ? de Lapierre et Collins avec une autre fiche livre. Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
zanoni Posté 2 Mars 2005 Auteur Partager Posté 2 Mars 2005 Bonjour, Tout d'abord merci pour vos réponses. J'ai bien dans ma base une table de jointure entre auteur et livre : la table ecrire. Mais comment l'utiliser dans mon script pour éviter l'affichage du titre et des autres infos en double lorsqu'il y a plusieurs auteurs pour le même livre ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
zanoni Posté 8 Mars 2005 Auteur Partager Posté 8 Mars 2005 Rebonjour tout le monde, J'ai encore besoin d'aide pour trouver une solution. Please help me !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant