Finalement, j’ai trouvé mon bonheur. Je le met au cas où ça puisse être amélioré et/ou servir à d’autres.
Pour rappel, je voulais récupérer les valeurs de 3 champs dynamiques sur une même ligne pour l’ensemble des contributions.
SELECT *,dynfield5.val as cheque,dynfield8.val as emetteur, dynfield7.val as banque
FROM galette_cotisations
LEFT JOIN (
SELECT item_id,field_val as val
FROM galette_dynamic_fields
WHERE field_id=5 AND field_form="contrib"
) AS dynfield5 ON id_cotis=dynfield5.item_id
LEFT JOIN (
SELECT item_id,field_val as val
FROM galette_dynamic_fields
WHERE field_id=8 AND field_form="contrib"
) AS dynfield8 ON id_cotis=dynfield8.item_id
LEFT JOIN (
SELECT item_id,field_val,val as val
FROM galette_dynamic_fields
INNER JOIN galette_field_contents_7
WHERE field_id=7 AND field_val=id AND field_form="contrib"
) AS dynfield7 ON id_cotis=dynfield7.item_id
NATURAL JOIN galette_adherents
N.B. : Je ne sais pas si utiliser plusieurs LEFT JOIN ainsi est la meilleure façon de faire? Mais en tout cas, c’est fonctionnel.
(pour l’asterisque dans le premier SELECT, il s’agissait de l’exemple mais je ne demanderai pas tous les champs dans l’export final ;) ).
En vous souhaitant une bonne soirée.
Salut,
Le 19.05.2017 21:22, Jérémy HIEULLE a écrit :
Je vais regarder ce que vous m’avez donné tout les deux.
Bon. J'essaie de comprendre ce que tu as voulu faire, mais c'est pas forcément évident ;)
En fait je veux simplement exporter les données des contributions
(comme un export de la base galette_cotisations mais avec les valeurs
des 3 champs dynamiques)
Désolé si je n’étais pas clair.
Pas de soucis :) Mais de fait, ton SELECT devrait se baser sur galette_contributions à la base, et pas galette_adherents (ça t'évitera sûrement des données que tu ne souhaites pas en premier lieu).
Alors... Le "0" devant le numéro de chèque est shooté parce que tu fais une SUM() dessus. Ça devient donc un nombre, et les 0 non significatifs sont virés.
De fait,ça me parait normal ; mais je ne comprend pas pourquoi tu fais un SUM sur le numéro de chèque, ça te donnera systématiquement une valeur non valide.
Des astuces que j’ai trouvé sur internet, le GROUP BY rend le champ
NULL sinon. ça fonctionnait avec les id mais c’est pas très propre
Le fait que tu aies des NULL est certainement lié à choix d'origine de la table (si tu te base sur la listes des adhérents, tu vas obtenir les adhérents qui n'ont jamais cotisé, et donc du NULL).
Alors... Bon. Méfies-toi des astuces trouvées. Des fois, ça sauve la vie. Des fois, ça fout la merde :D
Ce qu'il faut, c'es être bêtement logique. Tu veux des cotisations ? Interroge la table des cotisations. Si tu veux des infos sur l'adhérent ensuite, fais un JOIN, mais le "point d'entrée" importe.
Quant au SUM... Bah ça fait la somme de quelque chose. Si tu voulais récupérer le montant total des contributions d'un adhérent sur une période donnée, tu ferais un SUM(). Mais là, ça me semble inutile/source de problèmes.
Pour info, est-ce que la recherche avancée te permet de retrouver le résulatat souhaité ? (j'en doute un peu mais bon.... si c'est le cas, tu peux voir la requête effectuée depuis la recherche avancée, ça aide des fois).
Je suis pas un grand praticien, j’ai quelques bases mais je me met au
dev pour notre association, donc j’ai pas les bonnes pratiques. Je
verrai également ce que ça donne.
Être "expert" n'y change rien... Il est juste possible avec Galette (comme avec certains autres logiciels), d'obtenir la requête qui résulte de la recherche. Ça peut aider, mais quand le logiciel ne propose pas cette "option"... Ben... Faut composer :D
Again, bon courage.
PS: peut-être devrais-tu commencer par récupérer les infos que tu souhaites sans te préoccuper des champs dynamiques. Ces derniers ne sont normalement présents que pour apporter une info en plus ; donc, si tu réussis à avoir la liste des contributions avec les infos/sum/whatever que tu souhaites, l'ajout des champs dynamiques ne devrait pas y changer grand chose ;)
++
--
Johan
--
Galette users discussions
http://galette.eu -
http://galette.eu/documentationhttp://bugs.galette.eu/projects/galette/List documentation: https://listengine.tuxfamily.org/lists.galette.eu/users/