Author: esj@rezo.net
Date: 2007-12-23 09:34:29 +0100 (dim, 23 déc 2007)
New Revision: 10991
Log:
Ajout d'une déclaration de jointure pour pouvoir utiliser le critère id_mot dans une boucle syndic_articles. En particulier, le squelette de SpipContrib contenant:
{{{
<BOUCLE_motsiteszone(MOTS){id_mot=233}>
<BOUCLE_siteszone(SITES){id_mot}>
<BOUCLE_syndiczone(SYNDIC_ARTICLES){id_syndic}{doublons zone}> ....
</BOUCLE_syndiczone>
</BOUCLE_siteszone>
</BOUCLE_motsiteszone>
}}}
dont la première boucle était déjà superflue ({{{id_mot=233}}} pouvait se mettre comme critère de la 2e boucle), peut maintenant s'écrire avec une seule:
{{{
<BOUCLE_syndiczone(SYNDIC_ARTICLES){id_mot=233}{doublons zone}> ...
</BOUCLE_syndiczone>
}}}
et se compile en:
{{{
SELECT syndic_articles.id_syndic_article, syndic_articles.id_syndic
FROM Essai_syndic_articles AS `syndic_articles`
INNER JOIN Essai_mots_syndic AS L1 ON syndic_articles.id_syndic=L1.id_syndic
INNER JOIN Essai_syndic AS L2 ON syndic_articles.id_syndic=L2.id_syndic
WHERE (L1.id_mot = '233')
AND ((syndic_articles.id_syndic_article NOT IN (0)))
AND (syndic_articles.statut = 'publie')
AND (L2.statut = 'publie')
GROUP BY syndic_articles.id_syndic_article,syndic_articles.id_syndic
}}}
Le {{{IN (0)}}} correspond au cas d'un {{{doublons zone}}} vide, ce qui est
le cas du squelette de SpipContrib. Le gain est donc dans l'évacuation d'une boucle enchassant une boucle avec un IN qui grossissait à chaque itération de la boucle englobante.
Modified:
spip/ecrire/public/interfaces.php