Question peut-être stupide, mais j’aimerais connaitre l’objectif de certaines jointures :
Pourquoi est-ce qu’une boucle
<BOUCLE_listdoc1(DOCUMENTS){id_article}>
ne génère pas un code aussi simple qu’une boucle
<BOUCLE_listdoc2(DOCUMENTS_LIENS spip_documents){objet=‘article’}{id_objet=#ID_ARTICLE}>
?
La première boucle est devenue une vrai usine à gaz.
Voici les requêtes générées :
<BOUCLE_listdoc1> :
SELECT spip_documents.id_document, spip_documents.fichier, spip_documents.largeur, spip_documents.hauteur, spip_documents.titre
FROM spip_documents AS spip_documents LEFT JOIN spip_documents_liens AS l
ON spip_documents.id_document=l.id_document
LEFT JOIN spip_articles AS aa
ON (l.id_objet=aa.id_article AND l.objet=“article”)
LEFT JOIN spip_breves AS bb
ON (l.id_objet=bb.id_breve AND l.objet=“breve”)
LEFT JOIN spip_rubriques AS rr
ON (l.id_objet=rr.id_rubrique AND l.objet=“rubrique”)
LEFT JOIN spip_forum AS ff
ON (l.id_objet=ff.id_forum AND l.objet=“forum”)
INNER JOIN spip_documents_liens AS L1 ON ( L1.id_document = spip_documents.id_document )
WHERE ((aa.statut = “publie”) OR bb.statut = “publie” OR rr.statut = “publie” OR ff.statut=“publie”)
AND (spip_documents.mode != ‘vignette’)
AND (spip_documents.taille > 0 OR spip_documents.distant=‘oui’)
AND (L1.id_objet = 7)
AND (L1.objet = ‘article’)
GROUP BY spip_documents.id_document
et
<BOUCLE_listdoc2> :
SELECT documents_liens.id_document, L1.fichier, L1.largeur, L1.hauteur, L1.titre
FROM spip_documents_liens AS documents_liens
INNER JOIN spip_documents AS L1 ON ( L1.id_document = documents_liens.id_document )
WHERE (documents_liens.id_objet = 7)
AND (documents_liens.objet = ‘article’)
Dans la première requête, on sait que notre objet est un article (cf. code en fluo).
Donc pourquoi le rechercher dans les breves, rubriques, forums ?
.Gilles