zanoni Posté 1 Mars 2005 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.
rottman Posté 1 Mars 2005 Posté 1 Mars 2005 Ca doit etre un problème de if,else,elseif, mais là c'est compliquer à comprendre le code sans explication...
Anonymus Posté 2 Mars 2005 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.
Dan Posté 2 Mars 2005 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
zanoni Posté 2 Mars 2005 Auteur 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 ?
zanoni Posté 8 Mars 2005 Auteur Posté 8 Mars 2005 Rebonjour tout le monde, J'ai encore besoin d'aide pour trouver une solution. Please help me !!!
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant