Récupérer une seule fois certaines données d'une table Sql

Eléphanteau du PHP | 10 Messages

01 août 2006, 14:31

Bonjour,

J'ai une table du type :

Titre Auteur Bio_Auteur

Titre1 Auteur1 Texte
Titre2 Auteur1 Texte
Titre3 Auteur1 Texte
Titre4 Auteur2 Texte
Titre5 Auteur2 Texte
etc .... (le texte est tj le même)

et je voudrais afficher :

Auteur1
Texte
  • Titre1
    Titre2
    Titre3
Auteur2
Texte
  • Titre4
    Titre5
et non pas (ce que j'ai actuellement avec mon code ci-dessous)

Auteur1
Texte
Titre1

Auteur1
Texte
Titre2

Auteur1
Texte
Titre3

comment sortir une seule fois la données du tableau de résultats (en évitant une jointure sur une 2° table) ?

mon code
<?php
	include("connect/connect.php");
	$sql = "SELECT * FROM Catalogue ORDER BY auteur";
	$result = mysql_query($sql);
	while ($row = mysql_fetch_assoc($result)) {
           echo "$row[titre]";
           echo "$row[auteur]";
           echo "$row[texte]";
	}
	mysql_close($dp);
	?>
C'est surement facile mais je n'arrive pas à trouver dans les faqs ou forums et j'ai essayé un paquet de formules "mysql_fetch_......" sans résultats.
Merci d'avance.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2006, 14:35

Il faut faire un petit test qui affiche le texte quand tu changes d'auteur, le principe est ici : http://www.phpfrance.com/forums/voir_re ... php#112210

Mais bon si je peux me permettre, la structure n'est pas terrible, si un auteur a écrit 25 livres, tu stockes 25 fois sa bio :?

Ceci ne serait-il pas mieux ?
Ouvrages (id_ouvrage, titre, id_auteur#)
Auteurs (id_auteur, nom_auteur, prenom_auteur, bio_auteur)
Schéma correspondant à :
1 auteur a écrit 1 ou plusieurs livres
1 livre est écrit par 1 et 1 seul auteur

Eléphant du PHP | 88 Messages

01 août 2006, 14:38

Salut!

il te faut décomposer ta requête en plusieurs parties:

Voici comment je ferai:
$sql = "Select Distinct(auteur) , texte FROM Catalogue order by auteur;";
$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) {
   $auteur=$row["auteur"];
   echo $auteur;
   echo $row["texte"];
   $query="SELECT titre FROM Catalogue where auteur=$auteur;";
   $result2 = mysql_query($query); 
      while ($row2 = mysql_fetch_assoc($result2)) {
          echo $row2["titre"];
      }
}
Bon courage

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2006, 14:42

Certes ça fonctionne, mais ça deviendra rapidement très très lourd, puisqu'il y aura : NB auteurs+1 requêtes SQL

A partir de quelques dizainres, ouch ! #-o

Eléphant du PHP | 88 Messages

01 août 2006, 14:44

En effet, je te conseille moi aussi de passer par la structure de ouckileou.

@+

Eléphanteau du PHP | 10 Messages

01 août 2006, 15:24

Effectivement j'ai compris le principe ; en fait je vais quand même me taper deux tables et une jointure, parce que ca va devenir très vite trop lourd avec une simple boucle ...
Merci à tous...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2006, 15:32

je ne suis pas sûr de voir ce que tu vas faire, quand tu parles de 2 tables et une jointure tu parles de séparer "livres" et "auteurs" ?

C'est une bonne idée, par contre ça ne t'empêchera pas d'avoir besoin d'une boucle... :)

Eléphanteau du PHP | 10 Messages

14 août 2006, 17:41

(... je reprend ce post de retour de vacances , désolé)

j'ai fait une jointure
<?php
						include("connect/connect.php");
						$sql = "SELECT * FROM Catalogue LEFT JOIN Auteurs ON Catalogue.auteur = Auteurs.nomAuteur WHERE Catalogue.auteur LIKE '$ident' ";
						$result = mysql_query($sql);
						echo "<p class=\"h2_18\">$prenom $ident</span><br/>";

						while ($row = mysql_fetch_assoc($result)) {
							$id = $row[ISBN];
							echo "<br/><span class=\"titre\"><a href='titre.php?ident=$id' target='_self'>$row[titre]</a></span><br/>";
							echo "<span class=\"texte_12_14\">prix public :</span> <span class=\"prix\">$row[prix_public] &euro;</span><br/>";
							echo "<span class=\"texte_12_14\">$row[synopsis]</span><br/>";
							echo "<p class=\"texte_12_14\">$row[pages]</span> <span class=\"texte_11_13\">pages - format $row[format] - $row[reliure]</p><br/></td></tr>";
						}
						mysql_close($dp);
						?>
Je voudrais récupérer une seule fois le contenu du champ "bio" dans la table "Auteurs" et l'afficher sous $prenom $ident avant le début de la boucle ... je ne trouve pas la soluce ...
merci d'avance