[spip-dev] Fusion solidifiée

Hello,

Soit la boucle suivante pour voir un article d'article qui n'a pas de mot clé du groupe 5 pour chaque secteur*.

<BOUCLE_ca(ARTICLES){!id_groupe IN 5}{fusion id_secteur}{", "}>
  #ID_SECTEUR : #ID_ARTICLE
</BOUCLE_ca>

SPIP va interpreter cela comme suit :

SELECT id_secteur, articles.id_secteur, articles.id_article, articles.lang, articles.titre
FROM spip_articles AS `articles`
WHERE (articles.statut IN ('publie','prop'))
  AND NOT((articles.id_article IN (
SELECT L1.id_article
FROM spip_mots_articles AS `L1`
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE ((L2.id_groupe IN (5))))))
GROUP BY articles.id_article,id_secteur

Donc c'est l'échec, il ne fusionne pas comme on le lui demande sur les secteurs, mais sur les articles.

S'agit-il d'une entropie dérogatoire ou d'un oubli ?

BoOz

* On pourrait aussi vouloir les compter avec la balise #EXPRESSION{count(id_article)} du plugin agregateur_sql.

avec le critère fusion en premier :

<BOUCLE_ca(ARTICLES) {fusion id_secteur} {!id_groupe IN 5} {", "}>
   #ID_SECTEUR : #ID_ARTICLE
</BOUCLE_ca>

donne :

SELECT id_secteur, articles.id_secteur, articles.id_article, articles.lang, articles.titre
FROM spip_articles AS `articles`
WHERE (articles.statut = 'publie')
  AND (articles.date < '2012-11-09 20:39:00')
  AND NOT((articles.id_article IN (
SELECT L1.id_article
FROM spip_mots_articles AS `L1`
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE ((L2.id_groupe IN (5))))))
GROUP BY id_secteur,articles.id_article

denisb a écrit :

avec le critère fusion en premier :

Ah génial, merci pour le contournement.

Je vais faire ça en attendant mieux, car les critères sont réputés commutatifs non ?

BoOz