Triples jointures et conditions
Résolu/Fermé
Nitneuq
-
Modifié le 27 oct. 2020 à 17:27
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 - 28 oct. 2020 à 11:13
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 - 28 oct. 2020 à 11:13
A voir également:
- Triple jointure sql
- Récupération serveur sql - Télécharger - Gestion de données
- Logiciel sql - Télécharger - Bases de données
- Sql replace plusieurs valeurs - Forum Programmation
- Delete avec jointure sql server ✓ - Forum Bases de données
- Sql pix - Forum Python
4 réponses
yg_be
Messages postés
23312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 novembre 2024
Ambassadeur
1 552
27 oct. 2020 à 20:36
27 oct. 2020 à 20:36
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.
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.
jordane45
Messages postés
38273
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 novembre 2024
4 696
27 oct. 2020 à 21:08
27 oct. 2020 à 21:08
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 )
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 )
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 :
Si je les prends une à une ou avec la clause
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
jordane45
Messages postés
38273
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 novembre 2024
4 696
28 oct. 2020 à 10:13
28 oct. 2020 à 10:13
Déjà..
Combien de lignes de résultats te retourne cette requête ( dans phpmyadmin directement .. j'insiste..)
Et celle la ?
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 ...
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 ...
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 !
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 !
yg_be
Messages postés
23312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 novembre 2024
1 552
28 oct. 2020 à 11:13
28 oct. 2020 à 11:13
cela donne l'impression d'une déficience de MySQL.