PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Pb sur jointures multiples avec fichiers Mysql
Pb sur jointures multiples avec fichiers Mysql
Iniciado por rodolphe, fev., 08 2005 8:06 PM - 8 respostas
Publicado em fevereiro, 08 2005 - 8:06 PM
Bonjour
J'ai une requete que je cree en tant que requete dans windev, pour pouvoir remplir une table.
Cette requete comporte plusieurs jointures, problème recurrent avec windev.

Voila ma requete :

select reportage.reportage_id, reportage.titre, count(chapitre.chapitre_id) AS nb_chapitres, sum(chapitre.espace_disque) as taille, sum(chapitre.nb_photos) as nb_photos, reportage.visites, count(commande.commande_id) as nb_commandes, sum(commande.total) as chiffre_affaire
from reportage
left join chapitre on chapitre.reportage_id = reportage.reportage_id
left join commande on commande.reportage_id = reportage.reportage_id
group by reportage.reportage_id

Evidemment Windev me dit que la requete n'est pas valide car la syntaxe de la jointure ne lui plait pas.
J'ai bien sur tenté de remettre le nom de la table devant mon left join. Windev valide cette syntaxe, mais pas Mysql, sur lequel est executé la requete !!!!

Y at-il une syntaxe universelle qui passerait sous les 2 ???

Je suis plutôt coincé...

merci
Publicado em fevereiro, 08 2005 - 11:02 PM
Rodolphe a formulé la demande :
Bonjour
J'ai une requete que je cree en tant que requete dans windev, pour pouvoir
remplir une table. Cette requete comporte plusieurs jointures, problème
recurrent avec windev.

Voila ma requete :

select reportage.reportage_id, reportage.titre, count(chapitre.chapitre_id)
AS nb_chapitres, sum(chapitre.espace_disque) as taille,
sum(chapitre.nb_photos) as nb_photos, reportage.visites,
count(commande.commande_id) as nb_commandes, sum(commande.total) as
chiffre_affaire from reportage left join chapitre on chapitre.reportage_id =
reportage.reportage_id left join commande on commande.reportage_id =
reportage.reportage_id group by reportage.reportage_id

Evidemment Windev me dit que la requete n'est pas valide car la syntaxe de la
jointure ne lui plait pas. J'ai bien sur tenté de remettre le nom de la table
devant mon left join. Windev valide cette syntaxe, mais pas Mysql, sur lequel
est executé la requete !!!!

Y at-il une syntaxe universelle qui passerait sous les 2 ???

Je suis plutôt coincé...

merci


Le problème ne proviendrait pas plus du group by qui ne comporte les
champs reportage.titre et reportage.visites

--
A+

PhL
Publicado em fevereiro, 09 2005 - 12:51 AM
> Rodolphe a formulé la demande :

select reportage.reportage_id,
reportage.titre,
count(chapitre.chapitre_id) AS nb_chapitres,
sum(chapitre.espace_disque) as taille,
sum(chapitre.nb_photos) as nb_photos,
reportage.visites,
count(commande.commande_id) as nb_commandes,
sum(commande.total) as chiffre_affaire
from reportage left join chapitre on chapitre.reportage_id = reportage.reportage_id
left join commande on commande.reportage_id = reportage.reportage_id
group by reportage.reportage_id


Je vois un problème dans cette requête ...
- La clause "group by" doit reprendre toutes les colonnes de la
requête qui ne sont pas des fonctions de groupe, donc il manque
reportage.titre et reportage.visites.

Il faut comprendre que dans une requête SQL, qui utilise la clause
group by, il va y avoir une rupture sur chaque colonne du résultat
qui n'est pas une fonction de groupe (sommation, nombre, moyenne...).
Donc la logique voudrait que tu mettes en premier les colonnes
"simples" (sans fonction de groupe), puis les fonctions de groupe.
Et dans le group by, tu dois reprendre TOUTES les colonnes
simples. Tu peux ensuite ajouter une clause order by à la fin,
sinon par défaut le tri est fait sur chaque colonne simple dans l'ordre
d'apparition.

A mon avis, je dirais donc que la colonne reportages.visites n'est
pas à sa place (il faut la mettre après reportage.titre), et qu'il faut
mettre 3 colonnes dans le group by, les 3 premières (simples).

--
Jean-Michel CAMBOT metsdumanche chez baliciel.com
Baliciel HomePage : http://www.baliciel.com/
Publicado em fevereiro, 09 2005 - 10:01 AM
Pardon je me suis surement mal expliqué.
Cette requete est correcte, et me donne les bons résultats sous mysql !!!
En fait je l'ai un peu allégé dans mon mail pour montrer rapidement ce qu'elle contient.

Mais le problème est plus sournois :
cette requete est correctement executée sous mysql (d'ailleurs merci pour les precisions sur le group by, je vais regarder). D'ailleurs si je la cree en tant que nouvelle requete dans windev et que je l'execute avec "tester la requete", windev sait me retourner les enregistrements.
Mais windev ne reconnait pas la syntaxe de cette requete à cause des left join en cascade !!!!!

Ce qui veut dire que ma requete n'est pas considérée comme syntaxiquement valide par windev, et que je ne peux donc pas attacher le resultat de cette requete à une table et ses colonnes !!!! car tant que la syntaxe de la requete n'est pas valide pour windev, les champs récupérés dans le select ne sont pas reconnus par l'éditeur !!!

Voilà le fond de mon problème, je cale...
Publicado em fevereiro, 09 2005 - 10:27 AM
> Mais windev ne reconnait pas la syntaxe de cette requete à cause des left
join en cascade !!!!!
Ce qui veut dire que ma requete n'est pas considérée comme syntaxiquement

valide par windev, et que je ne peux donc pas attacher le resultat de cette
requete à une table et ses colonnes !!!!
> car tant que la syntaxe de la requete n'est pas valide pour windev, les
champs récupérés dans le select ne sont pas reconnus par l'éditeur !!!

Pour info, j'ai aussi les mêmes problèmes ! Et pas de solution non plus !
Suis donc aussi preneur de vos idées.
Publicado em fevereiro, 09 2005 - 10:40 AM
As-tu essayé HexecuterequeteSQL avec le paramètre hRequêteSansCorrection ?
Publicado em fevereiro, 09 2005 - 11:14 AM

As-tu essayé HexecuterequeteSQL avec le paramètre hRequêteSansCorrection ?


Oui, bien sur. Mais dans ce cas, impossible de gérer les paramètres null.
C'est un problème que j'ai soumis au ST sans solution actuellement.
Publicado em julho, 30 2005 - 9:28 PM
J'ai exactement le même problème si vous avez trouvé la solution...
Publicado em julho, 30 2005 - 10:02 PM
Pour ton paramètre null essaye = ""