Bonjour à tous,
j'essaie de récupérer dans un squelette des données provenant d'une autre application MySQL.
Pas de soucis pour faire des boucles, SPIP le gère très bien sauf sur un petit point : les jointures.
En effet, dans cette appli, les champs pour la jointure ne sont pas les mêmes dans les différentes tables. Explication :
Une table events avec comme champs : id, title, date etc.
Une table events_cal avec comme champs id_event et id_cal.
Le champ events.id correspond au champ events_cal.id_event
L'objectif consiste à faire une boucle sur events en y passant un critère sur l'id_cal.
Solution la plus simple :
<BOUCLE_1(events){autres critères}>
<BOUCLE_2(events_cal){id_event=#ID}{id_cal}>
...
</BOUCLE_2>
</BOUCLE_1>
C'est fonctionnel mais ca multiplie les requêtes SQL.
Si je fais une <BOUCLE_1(events events_cal)> ca ne peut pas marcher puisque id et id_event ne sont pas homonymes. SPIP ne sait donc pas faire tout seul la jointure.
Est-il possible en 1.9.2 de spécifier manuellement la jointure dans la syntaxe la boucle ?
Cordialement à tous
Joseph
dans la déclaration de tes tables, il faut ajouter quelque chose du style:
global $tables_jointures;
$tables_jointures['spip_mots']= 'mots_articles';
global $exceptions_des_jointures;
$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre');
Pierre
Joseph wrote:
Bonjour à tous,
j'essaie de récupérer dans un squelette des données provenant d'une
autre application MySQL.
Pas de soucis pour faire des boucles, SPIP le gère très bien sauf sur un
petit point : les jointures.
En effet, dans cette appli, les champs pour la jointure ne sont pas les
mêmes dans les différentes tables. Explication :
Une table events avec comme champs : id, title, date etc.
Une table events_cal avec comme champs id_event et id_cal.
Le champ events.id correspond au champ events_cal.id_event
L'objectif consiste à faire une boucle sur events en y passant un
critère sur l'id_cal.
Solution la plus simple :
<BOUCLE_1(events){autres critères}>
<BOUCLE_2(events_cal){id_event=#ID}{id_cal}>
...
</BOUCLE_2>
</BOUCLE_1>
C'est fonctionnel mais ca multiplie les requêtes SQL.
Si je fais une <BOUCLE_1(events events_cal)> ca ne peut pas marcher
puisque id et id_event ne sont pas homonymes. SPIP ne sait donc pas
faire tout seul la jointure.
Est-il possible en 1.9.2 de spécifier manuellement la jointure dans la
syntaxe la boucle ?
Cordialement à tous
Joseph
Pierre Andrews a écrit :
dans la déclaration de tes tables, il faut ajouter quelque chose du style:
global $tables_jointures;
$tables_jointures['spip_mots']= 'mots_articles';
global $exceptions_des_jointures;
$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre');
Pierre
Cela indique que titre_mot pointe sur le champs titre de la table spip_mots. Mais la jointure entre les tables, spip_articles et spip_mots, se fait toujours sur des champs homonymes (à savoir id_article et id_mot qui sont tous deux présents dans spip_mots_articles).
Or là, il s'agit de deux champs qui ne sont pas homonymes dans les deux tables.