Aller au contenu

Affichage d'un sommaire


Sujets conseillés

Posté

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.

Posté

Ca doit etre un problème de if,else,elseif, mais là c'est compliquer à comprendre le code sans explication...

Posté

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.

Posté

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

Posté

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 ?

Posté

Rebonjour tout le monde,

J'ai encore besoin d'aide pour trouver une solution. Please help me !!!

Veuillez vous connecter pour commenter

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



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