Triples jointures et conditions

Résolu
Nitneuq -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

N'étant pas expert en SQL, je bloque sur une triple jointure où j'ai des conditions sur chaque table. Je ne suis d'ailleurs pas sûr que la LEFT JOIN soit idéale dans mon cas.

Voici ma requête SQL :

"SELECT P.id_produit, P.id_prod_sf, P.code_interne, P.libelle_interne, S.bouton_achat, F.date_maj, F.statut_commercial 
FROM produit P
LEFT JOIN stock S ON P.id_prod_sf = S.id_prod_sf
LEFT JOIN software F ON P.code_interne = F.cnk
WHERE P.code_interne != ''
AND S.bouton_achat = 1
AND F.statut_commercial = 'S'";


Je désire afficher toutes les lignes de ma table "produit" correspondant aux 3 conditions ci-dessus .... mais ma requête me renvoie à chaque fois une erreur 500 sur mon serveur

Une requête dans le même style mais avec seulement deux conditions sur mes 3 tables fonctionne :
"SELECT P.id_prod_sf, P.code_interne, P.libelle_interne, P.prix_public, P.prix_ttc, S.bouton_achat, F.date_maj, F.prix_public AS prix_public_software
FROM produit P
LEFT JOIN stock S ON P.id_prod_sf = S.id_prod_sf
LEFT JOIN software F ON P.code_interne = F.cnk
WHERE S.bouton_achat = 1
AND P.prix_public != F.prix_public";



Merci d'avance pour votre aide pour ma 1ère requête (et peut-être la deuxième peut elle être optimisée ?) !
A voir également:

4 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
comment exécutes-tu cette requête?
une technique habituelle, quand on rencontre une erreur, est de modifier la requête, pour découvrir d'où vient le problème.
essaie la requête problématique sans la clause WHERE, et/ou sans les clauses ON.
1
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour

Tu parles d'une erreur 500... Mais.. comment testes tu ta requête ??
Il faut déjà la tester DIRECTEMENT dans ta bdd via phpmyadmin par exemple...

Une erreur 500... C'est une erreur côté serveur.. souvent lié à une erreur d'écriture du code ( php je suppose )

1
Nitneuq
 
Bonjour,

Merci pour vos réponses.

En effet, je l'ai à la fois testée directement sur phpmyadmin et en PHP (d'où mon erreur 500).
Les deux ne fonctionnent pas : ça tourne en boucle sur phpmyadmin, et ça me provoque une erreur serveur 500 via PHP.

Quand je teste ma requête sans la clause WHERE, cela fonctionne. Je pense donc que cela provient de celle-ci ... mais je ne sais pas comment la régler.

J'ai été un peu plus loin dans mes tests, ce sont les deux clauses suivantes qui une fois mise ensemble font planter ma requête :
 WHERE S.bouton_achat = 1
AND F.statut_commercial = 'S'

Si je les prends une à une ou avec la clause
P.code_interne != '' 
cela fonctionne sans aucun soucis. Mais quand elles sont toutes les deux ensemble, cela plante
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Déjà..
Combien de lignes de résultats te retourne cette requête ( dans phpmyadmin directement .. j'insiste..)
SELECT P.id_produit, P.id_prod_sf, P.code_interne, P.libelle_interne, S.bouton_achat, F.date_maj, F.statut_commercial 
FROM produit P 
LEFT JOIN stock S ON P.id_prod_sf = S.id_prod_sf 
LEFT JOIN software F ON P.code_interne = F.cnk 
WHERE P.code_interne <> '' 
  AND F.statut_commercial = 'S'


Et celle la ?
  
SELECT P.id_produit, P.id_prod_sf, P.code_interne, P.libelle_interne, S.bouton_achat, F.date_maj, F.statut_commercial 
FROM produit P 
LEFT JOIN stock S ON P.id_prod_sf = S.id_prod_sf 
LEFT JOIN software F ON P.code_interne = F.cnk 
WHERE P.code_interne <> '' 
  AND S.bouton_achat = 1 


Et puis... difficile de te répondre sans connaitre la structure de tes tables ...
Et si tu as bien mis des index sur les champs utilisés pour les jointures ...
0
Nitneuq
 
175 pour la première requête et 2378 pour la deuxième. J'ai un total de 3444 lignes sans clause WHERE.


Je viens de mettre un INDEX sur tous les champs possibles et ma requête fonctionne tout à coup ... j'utilise rarement l'INDEX et je ne savais pas que cela pouvait jouer un réel impact sur ma requête !

Merci du coup, c'est résolu !
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
cela donne l'impression d'une déficience de MySQL.
0