[spip-dev] boucles et jointures

bonsoir,

soit la boucle :
   <BOUCLE_r(ARTICLES rubriques)>
     #TITRE - #ID_PARENT<br />
   </BOUCLE_r>

requête sql produite :
   SELECT articles.titre,
          L1.id_parent,
          articles.lang
     FROM spip_articles AS `articles`
          INNER JOIN spip_rubriques AS L1
                  ON L1.id_rubrique = articles.id_rubrique
    WHERE articles.statut = 'publie'
   AND articles.date < '2138-01-01 00:00:00'

comme on peut le voir, le champ L1.id_parent est sélectionné
et la balise #ID_PARENT sera bien renseignée

soit la boucle :
   <BOUCLE_r(ARTICLES){rubriques.id_parent >= 0}>
     #TITRE - #ID_PARENT<br />
   </BOUCLE_r>

requête sql produite :
   SELECT articles.titre,
          articles.lang
     FROM spip_articles AS `articles`
          INNER JOIN spip_rubriques AS L1
                  ON L1.id_rubrique = articles.id_rubrique
    WHERE articles.statut = 'publie'
      AND articles.date < '2138-01-01 00:00:00'
      AND L1.id_parent >= 0

ici, le champ L1.id_parent n'est pas sélectionné
et la balise #ID_PARENT ne sera pas renseignée

la question que je me pose est : les deux écritures de boucle
doivent-elles ou non fournir un résultat identique (au-dela de la
fabrication de la jointure) ?

Salut Denis,

Je ne sais pas si ça devrait dans l'idéal (je suppose) mais ce que j'ai compris de tout ça lorsque j'avais regardé un peu, c'est que tu ne peux utiliser une #BALISE (non spécifique) que si la table est renseignée quelque part entre les parenthèses de boucle (table1 table2).

J'avais noté ce cas dans l'exemple de cet article
http://programmer.spip.org/Forcer-des-jointures

Matthieu.

Il y a aussi une très utile nouvelle synthèse de Severo :
http://www.spip-contrib.net/Notes-sur-les-jointures-entre-tables

JLuc