Proble de duplication lors d'affichage

salut
je fais mon memoir d efin d’etude et j’ai fais une application qui permet l’acces en ligne aux catalogue d el bibliotheque , le problem est que aavec MYSQL et php j’obteint toujours des repititions dans l’affichage du catalogue ; je m’explique j’ai par expl 3 tables ouvrage , auteur et rediger qui es tla relation entre ouvrage et redige
Ouvrage (cot_ouv, ISBN, Titre_principal_ouv,Titre_second_ouv , Année_edit_ouv,Serie_ouv, resum_ouv,Nbr_exp_ouv ,format_ouv)
auteur(cod_aut,nom_aut,pre_aut)
redige(cote_ouv,cod_aut,fct_auteur) :fonctione auteur dans l’ouvrage

je n’arrive pas a former une requette juste qui permet d’afficher les titres des ouvrages avec tout ces auteurs et leur fonctions sans répition
avec cette requette j’obtiens l’affichage des ouvrages autans de fois que le nombre d’auteurs

SELECT *
FROM ouvrage , auteur , redige
WHERE (auteur.cod_aut = redige.cod_aut and redige.cote_ouv = ouvrage.cote_ouv)

comment faire pour ne pas tomber ds les redandances ? es le problem de requettes? ou d’exploitation de requettes avec php?
j’attend votre aide
Edité le 07/09/2007 à 09:24


(Et change de titre de Topic : mets en un explicite, en relation avec ton problème)
Edité le 16/04/2009 à 19:45

Tout est dit.

il est dit ou ?

SELECT o.cot_ouv, o.ISBN, o.Titre_principal_ouv,o.Titre_second_ouv , o.Année_edit_ouv,o.Serie_ouv, o.resum_ouv,o.Nbr_exp_ouv ,o.format_ouv , r.cod_aut,r.fct_auteur , a.nom_aut,a.pre_aut
FROM ouvrage o, auteur a, redige r
WHERE (a.cod_aut = r.cod_aut and r.cote_ouv = o.cote_ouv)

mais avec cette requete j’ai des redandances toujours

redondances :wink:

et avec un DISTINCT dans la requête?

expliquer mieux svp

Exprime-toi mieux dans ce cas :wink:
Edité le 07/09/2007 à 20:01

voici mon scripte
es que qq parmi vous peux me detecter ou reside le problem?

<?php require_once('Connections/Connexion_Bas.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $currentPage = $_SERVER["PHP_SELF"]; $maxRows_Recordset1 = 5; $pageNum_Recordset1 = 0; if (isset($_GET['pageNum_Recordset1'])) { $pageNum_Recordset1 = $_GET['pageNum_Recordset1']; } $startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1; mysql_select_db($database_Connexion_Bas, $Connexion_Bas); $query_Recordset1 = "SELECT * FROM ouvrage , auteur , redige WHERE (auteur.cod_aut= redige.cod_aut and redige.cote_ouv = ouvrage.cote_ouv)"; $query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1); $Recordset1 = mysql_query($query_limit_Recordset1, $Connexion_Bas) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); if (isset($_GET['totalRows_Recordset1'])) { $totalRows_Recordset1 = $_GET['totalRows_Recordset1']; } else { $all_Recordset1 = mysql_query($query_Recordset1); $totalRows_Recordset1 = mysql_num_rows($all_Recordset1); } $totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1; $queryString_Recordset1 = ""; if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_Recordset1") == false && stristr($param, "totalRows_Recordset1") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_Recordset1 = "&" . htmlentities(implode("&", $newParams)); } } $queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1); ?> Catalogue Ouvrage

Résultat <?php echo ($startRow_Recordset1 + 1) ?> a <?php echo min($startRow_Recordset1 + $maxRows_Recordset1, $totalRows_Recordset1) ?> de <?php echo $totalRows_Recordset1 ?>


 

<?php do { ?> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

<?php echo $row_Recordset1['Titre_principal_ouv']; ?> 

<?php echo $row_Recordset1['Nom']; ?> <?php echo $row_Recordset1['nom_editeur']; ?><?php echo $row_Recordset1['annee_edit_ouv']; ?>

<?php echo $row_Recordset1['Resume_ouv']; ?>   



<?php if ($pageNum_Recordset1 > 0) { // Show if not first page ?> ">Premier <?php } // Show if not first page ?>

<?php if ($pageNum_Recordset1 > 0) { // Show if not first page ?> ">Précédent <?php } // Show if not first page ?>

<?php if ($pageNum_Recordset1 < $totalPages_Recordset1) { // Show if not last page ?> ">Suivant <?php } // Show if not last page ?>

<?php if ($pageNum_Recordset1 < $totalPages_Recordset1) { // Show if not last page ?> ">Dernier <?php } // Show if not last page ?>

<?php mysql_free_result($Recordset1); ?>

SELECT DISTINCT(Ouvrage.Titre_principal_ouv), auteur.nom_aut FROM Ouvrage WHERE Ouvrage.cot_ouv = redige.cod_ouv AND redige.cod_aut = auteur.cod_aut

tu pourrais également utiliser distinctrow.