Aliasses-les dans le SELECT et utilises les alias dans la sous-requête.
Aliasses-les dans le SELECT et utilises les alias dans la sous-requête.
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Pareil
J'ai l'impression qu'il faille faire une sous-requête pour la sous_requête facture_ligne. Mais bon j'en sais rien, je ne vois absolument pas comment faire, car déjà le sous-requête corrélée, je n'aurai jamais trouvé, chapeau bas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Documentation SELECT v.imma_actif, g.km, g.date_max AS dmax, g.date_mini AS dmin, f.ca, f.ca / g.km AS calcul FROM vehicule v LEFT JOIN ( SELECT gasoil.id_vehicule, MAX( gasoil.compteur ) - MIN( gasoil.compteur ) AS km, DATE( MAX( gasoil.`date` ) ) AS date_max, DATE( MIN( gasoil.`date` ) ) AS date_mini FROM gasoil WHERE DATE( gasoil.`date` ) BETWEEN '2008-10-01' AND '2008-10-31' ) AS g ON g.id_vehicule = v.id_vehicule LEFT JOIN ( SELECT sum( fl.prix ) AS ca, fl.id_vehicule FROM facture_ligne fl WHERE fl.date_voyage BETWEEN dmin AND dmax ) AS f ON f.id_vehicule = v.id_vehicule MySQL a répondu: #1054 - Unknown column 'dmin' in 'where clause'
En fait les sous-requêtes ne sont pas corrélées, ce sont les clauses ON des jointures qui assument ce rôle.
C'est bien le problème, c'est que là, avec date_max et date_mini, on essaye de corréler la sous-requête avec la requête mère, mais il n'accepte pas.
Faire des sous-sous-requêtes corrélées avec la sous-requête nécessite d'en faire une pour chaque valeur du BETWEEN, ce qui va être rédhibitoire pour le serveur.
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Bon Ok, j'ai trouver une solution, je ne vais plus me baser sur la table gasoil, mais géolocalisation.
La requête sera sensiblement la même, au détail que je n'ai plus besoin de la sous-sous-requete. Ca va simplifier les calculs et donc c'est le serveur qui sera content.
En tout cas je vous remercie tous pour votre aide, vous êtes super.
Bon après avoir testé plus profondement, il fait absolument faire un GROUP BY pour chaque sous requêtes, et d'ailleurs le message d'erreur sur le serveur de production venait de là .
Merci à tous
Ce qui est assez logique, quand on y pense bien.
Tu dois faire un GROUP BY g.id_vehicule par exemple bien que tu ne laisses passer qu'un seul g.id_vehicule dans la clause ON de la jointure.
Mais cette jointure ne s'opère pas au même niveau, elle est en dehors des parenthèses de la sous-requête.
Bien vu.
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager