[MySQL] Requête avec jointure qui fonctionne pas avec MySQL5

Requête avec jointure qui fonctionne pas avec MySQL5 [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 30-04-2007 à 18:31:02    

Bonjour,
 
Je m'arrache le peu de cheveux qu'il me reste avec une requête à jointures qui fonctionnait parfaitement avec MySQL4 et qui me renvoie une jolie série d'erreurs avec MySQL5.
 
Le monstre :

Code :
  1. SELECT r.nom_rub, c.id_cat, c.id_rub, nb_sujets, nb_reponses, nom_cat, date_der_message, der_message, date_message_lu, desc_cat
  2.    FROM `categories` AS c, `droits` AS d
  3.    LEFT JOIN `categories_suivi` AS s ON (c.id_cat=s.id_cat)
  4.    LEFT JOIN `rubriques` AS r ON (c.id_rub=r.id_rub)
  5.    WHERE (d.id_cat=c.id_cat AND d.id_statut=1 AND d.lecture=1 AND s.id_membre=1)
  6.    ORDER BY `ordre_rub`, `ordre_cat`


 
Les contenus des 2 bases de données sont exactement les mêmes (la base MySQL5 est une réplication de la base MySQL4), et la version MySQL5 me renvoit l'erreur Champ 'c.id_cat' inconnu dans on clause
 
Si je remplace LEFT JOIN `categories_suivi` AS s ON (c.id_cat=s.id_cat) par LEFT JOIN `categories_suivi` AS s USING (id_cat) et l'équivalent pour LEFT JOIN `rubriques`, je me retrouve avec une nouvelle erreur : Champ 'id_rub' inconnu dans from clause.
 
A noter aussi que la requête simple avec uniquement la jointure entre les tables categories et droits fonctionne correctement :

Code :
  1. SELECT c.id_cat, c.id_rub, nb_sujets, nb_reponses, nom_cat, date_der_message, der_message, desc_cat
  2.    FROM `categories` AS c, `droits` AS d
  3.    WHERE (d.id_cat = c.id_cat AND d.id_statut =1 AND d.lecture =1)
  4.    ORDER BY `ordre_cat`


 
Il y a des différences importante de gestion des jointures entre MySQL4 et MySQL5 ?
 
Si vous avez une idée de la source du problème, ça m'aiderai bien ;)  
 
Merci d'avance :)

Reply

Marsh Posté le 30-04-2007 à 18:31:02   

Reply

Marsh Posté le 30-04-2007 à 19:13:28    

Je n'ai pas la réponse mais pourquoi mélanger des jointures avec WHERE et d'autres avec JOIN ?
 
As-tu essayé :
 

Code :
  1. SELECT r.nom_rub, c.id_cat, c.id_rub, nb_sujets, nb_reponses, nom_cat, date_der_message, der_message, date_message_lu, desc_cat
  2.    FROM `categories` c
  3.    INNER JOIN `droits` d ON d.id_cat=c.id_cat
  4.    LEFT JOIN `categories_suivi` s ON c.id_cat=s.id_cat
  5.    LEFT JOIN `rubriques` r ON c.id_rub=r.id_rub
  6.    WHERE d.id_statut=1 AND d.lecture=1 AND s.id_membre=1
  7.    ORDER BY `ordre_rub`, `ordre_cat`


 
juste par curiosité :)

Reply

Marsh Posté le 30-04-2007 à 19:56:12    

Je mélange les jointures simplement parce que cette requête a été faite en plusieurs fois au fur et à mesure de l'évolution du besoin et que j'avais commencé par une bête jointure entre catégorie et droits à l'origine ;)  
 
En tous cas, ça à l'air de marcher comme il faut maintenant ... Je dois faire quelques tests quand même pour vérifier mais déjà un grand merci :)

Reply

Sujets relatifs:

Leave a Replay

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