+54
−13
+1
−1
Chargement en cours
Compilation d'une boucle sans que sa table n'aparaisse dans la requête SQL. Trop beau pour être vrai ?
Soit la boucle donnée dans [11087]:
{{{
<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
}}}
dont la compilation montre que finalement c'est seulement le contenu de la table de jointure spip_mots_articles. Il suffit de regarder si la table principale a des occurrences dans les clauses de la requête, compte non tenu des champs dont la fabrication de la jointure dit justement qu'ils sont égaux à celle de l'autre table. Si oui, on remplace les synonymes et on élimine complètement le début de la clause FROM. Ainsi, la boucle ci-dessus ne se compile plus en
{{{
SELECT 1
FROM spipnet_mots AS `mots`
INNER JOIN spipnet_mots_articles AS L1 ON mots.id_mot=L1.id_mot
WHERE (L1.id_article = 898)
AND (mots.id_mot = 409)
}}}
mais en
{{{
SELECT 1
FROM spipnet_mots_articles AS L1
WHERE (L1.id_article = 898)
AND (L1.id_mot = 409)
}}}
L'optmisation se retrouve aussi dans par exemple:
{{{
<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
<BOUCLE1(ARTICLES){id_mot} />#TOTAL_BOUCLE<//B1>
<BOUCLE4(ARTICLES){id_mot}{id_article} />#TOTAL_BOUCLE<//B4>
}}}
Il manquait qqch pour traiter ce cas dans la version MySQL, mais pour PG c'était prévu prémonitoirement. Il faut vérifier pour SQLite.
Forge communautaire SPIP | Charte d'utilisation | Signaler un problème sur ce site