Aller au contenu

Affichage d'un sommaire


zanoni

Sujets conseillés

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 enregistrements
while ($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

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

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

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...