Bonjour,

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

Je me suis basé là-dessus 
https://www.mail-archive.com/galette-discussion@gna.org/msg04174.html 
<https://www.mail-archive.com/galette-discussion@gna.org/msg04174.html>. 
(Discussion que j’avais déjà vu mais je n’avais pas du en comprendre les 
rouages).

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.

> Le 19 mai 2017 à 21:35, Johan Cwiklinski <jo...@x-tnd.be> a écrit :
> 
> 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/documentation
> http://bugs.galette.eu/projects/galette/
> 
> List documentation: https://listengine.tuxfamily.org/lists.galette.eu/users/
> 

Répondre à