Erreur SQL sur boucle

Bonjour,
J’ai une boucle de base qui me sort un article par rubrique :

<BOUCLE_rubs(ARTICLES){fusion id_rubrique}>
#ID_ARTICLE, #ID_RUBRIQUE;
</BOUCLE_rubs>

Si j’ajoute des critères

<BOUCLE_rubs(ARTICLES){id_mot ?IN #ENV**{sections}}{id_mot ?IN #ENV**{contrats}}{fusion id_rubrique}>
#ID_ARTICLE, #ID_RUBRIQUE;
</BOUCLE_rubs>

la boucle me sort tous les articles.
Par le mode debug j’ai vu qu’il y avait un GROUPBY id_article.
J’ai donc ajouté un fusion_supprimer :

<BOUCLE_rubs(ARTICLES){id_mot ?IN #ENV**{sections}}{id_mot ?IN #ENV**{contrats}}{fusion_supprimer id_article}{fusion id_rubrique}>
#ID_ARTICLE, #ID_RUBRIQUE;
</BOUCLE_rubs>

et ça marche, je n’ai qu’un article par rubrique.

Je voulais juste un explication de l’apparition de ce groupby id_article.
Merci

Décidément, j’ai des soucis sur cette première boucle.

    #SET{etabs,#ARRAY}
<BOUCLE_rubs(ARTICLES){id_mot ?IN #ENV**{sections}}{0, #ENV{limit,12}}>
    #SET{etabs, #GET{etabs}|push{#ID_RUBRIQUE}}
</BOUCLE_rubs>

ENV**{sections} vient d’un formulaire

Au premier affichage du formulaire, ma boucle tourne.
Au post du formulaire, j’ai auparavant coché une case qui fait que #ENV**{sections} contient un tableau dont la première valeur est un entier (5).
Et Spip me donne une erreur :

Unknown column 'L1.id_mot' in 'order clause'
SELECT articles.id_rubrique, articles.lang, articles.titre FROM spip_articles AS `articles` WHERE (articles.statut = 'publie') GROUP BY articles.id_article ORDER BY FIELD(L1.id_mot,5) LIMIT 0,12

Effectivement, le ORDER BY est bizarre…

En fait si j’appelle #ID_MOT à l’intérieur de la boucle, l’erreur n’apparaît pas.
L’erreur est parce que la boucle n’utilise pas la balise #ID_MOT qui doit être L1.id_mot dans la requête…
Il me semble avoir vu ce type de problème de génération SQL, mais je ne retrouve pas la solution.
Merci

J’ai trouvé, j’ai rajouté dans la boucle :

    [(#ID_MOT|oui)] 

et la boucle passe !

Car alors le compilateur SPIP comprend qu’il a besoin de cette jointure.
Et sinon il semble se planter car c’est un critère conditionnel et qu’il n’y a pas toujours besoin de cette jointure.
J’ai ajouté le problème décrit et la soluce sur https://contrib.spip.net/Difficultes-avec-jointures-et-solutions.

1 « J'aime »

Merci pour la publication.