Problème Jointure SQL

Problème Jointure SQL - PHP - Programmation

Marsh Posté le 19-11-2009 à 18:33:16    

Voici un bout de code liste_news.php me permet de valider, modifier et supprimer une news. Elle m'affiche aussi son titre, sa date postée, et son auteur.
 

Code :
  1. <table><tr>
  2. <th>Valider</th>
  3. <th>Modifier</th>
  4. <th>Supprimer</th>
  5. <th>Titre</th>
  6. <th>Date</th>
  7. <th>Auteur</th>
  8. </tr>
  9. <?php
  10. $retour = mysql_query('
  11. SELECT *
  12. FROM news
  13. LEFT JOIN membres ON membres.id = news.id_membre
  14. ORDER BY news.id DESC');
  15. while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
  16. {
  17. ?>
  18. <tr>
  19. <td><?php echo '<a href="liste_news.php?valider_news=' . $donnees['id'] . '">'; ?>Valider</a></td>
  20. <td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
  21. <td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
  22. <td><?php echo stripslashes($donnees['titre']); ?></td>
  23. <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
  24. <td><?php echo $donnees['prenom']; echo " "; echo $donnees['nom'];?></td>
  25. </tr>
  26. <?php
  27. } // Fin de la boucle qui liste les news
  28. ?>
  29. </table>


 
Le problème est que $donnees['id'] me renvoi l'ID du membre qui a posté la news.
Alors que cet ID doit correspondre au n° de la news.

  • champs table news: id, titre, contenu, timestamp, validation, id_membre
  • champ table membres: id, login, pass_md5, prenom, nom, formation


Est-ce un problème de jointure?
Merci d'avance.


Message édité par Hamy le 19-11-2009 à 18:33:52
Reply

Marsh Posté le 19-11-2009 à 18:33:16   

Reply

Marsh Posté le 19-11-2009 à 18:37:35    

RTFM :  
http://fr.php.net/manual/fr/functi [...] -array.php : Exemple #1  
Requête avec duplication de nom de colonnes


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-11-2009 à 18:52:45    

Ok merci de ta réponse. Donc si j'ai bien compri ma requete sera:
$retour = mysql_query('
SELECT membres.id AS id1, news.id AS id2
FROM news, membres
ORDER BY id2 DESC');  
C'est bon ça ?

Reply

Marsh Posté le 19-11-2009 à 20:19:18    

Oui, si tu ne veux pas du titre, du nom...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-11-2009 à 20:37:04    

Non je veux le nom de l'auteur, le titre de la news, sa date et son id

Reply

Marsh Posté le 19-11-2009 à 20:42:42    

Il faut donc les mettre dans ta requête...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-11-2009 à 20:56:07    

Rien à faire toujours un problème:

Code :
  1. $retour = mysql_query('
  2. SELECT membres.id AS id1, news.id AS id2, membres.prenom, membres.nom, news.titre, news.timestamp
  3. FROM news, membres
  4. ORDER BY id2 DESC');
  5. while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
  6. {
  7. ?>
  8. <tr>
  9. <td><?php echo '<a href="liste_news.php?valider_news=' . $donnees['id2'] . '">'; ?>Valider</a></td>
  10. <td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id2'] . '">'; ?>Modifier</a></td>
  11. <td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id2'] . '">'; ?>Supprimer</a></td>
  12. <td><?php echo stripslashes($donnees['titre']); ?></td>
  13. <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
  14. <td><?php echo $donnees['prenom']; echo " "; echo $donnees['nom'];?></td>


 
J'obtiens la liste de tout mes membres. Je veux juste afficher les news (titre et date) ainsi que l'auteur (prenom nom)

Reply

Marsh Posté le 19-11-2009 à 21:03:33    

Le left join a disparu...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-11-2009 à 21:04:53    

Il te manque la clause "WHERE" pour que la jointure soit faite.


---------------
www.blurk.fr
Reply

Marsh Posté le 19-11-2009 à 21:17:08    

Ok enfin ça marche...
Ma requête était foireuse.
Correction:

Code :
  1. $retour = mysql_query('
  2. SELECT news.id AS id1, news.titre, news.timestamp, news.id_membre, membres.prenom, membres.nom
  3. FROM news
  4. LEFT JOIN membres ON membres.id = news.id_membre
  5. ORDER BY id1 DESC');


Après j'incruste l'alias de l'ID dans mon lien:

Code :
  1. <td><?php echo '<a href="liste_news.php?valider_news=' . $donnees['id1'] . '">'; ?>Valider</a></td>


Bonne soirée à vous

Reply

Marsh Posté le 19-11-2009 à 21:17:08   

Reply

Marsh Posté le 20-11-2009 à 11:48:03    

De manière générale, évite les select * :
 
- très souvent, tu récupères des colonnes dont tu n'as aucun besoin
- pour la maintenance, tu ne sais pas explicitement ce que tu récupères

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed