Il est également possible de définir un critère pour forcer une jointure.
Créer un critère pour une jointure
Exemple
On veut enrichir une boucle sur la table spip_entreprises
en y joignant une table spip_entreprises_details
qui partage la même clef primaire id_entreprise
.
On définit pour cela le critère {avec_details}
, ici pour un LEFT JOIN
:
function critere_avec_details_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$boucle->from['entreprises_details'] = 'spip_entreprises_details';
$boucle->from_type['entreprises_details'] = 'LEFT';
$boucle->join['entreprises_details']= array(
"'entreprises'",
"'id_entreprise'", // champ de spip_entreprises_details
"'id_entreprise'" // champ de spip_entreprises
);
}
Il sera ainsi possible d’accéder aux champs de spip_entreprises_details
dans une boucle (ENTREPRISES){avec_details}
.
Pour utiliser aussi un critère sur un champ de spip_entreprises_details
, il faut en plus insérer la ligne suivante dans le code du critère :
$boucle->jointures[] = 'entreprises_details';
Créer un critère pour ajouter un FROM et un WHERE
On peut également créer un critère {where_details}
qui ajoute une table dans le FROM
et un WHERE
dans la query SQL.
function critere_where_details_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$boucle->from['entreprises_details'] = 'spip_entreprises_details';
$where = array("'='", "'entreprises.id_entreprise'", "'entreprises_details.id_entreprise'");
$boucle->where[] = $where;
}
Liens complémentaires
– Sur spip.net : Les jointures entre tables
– Sur le carnet wiki : Le Carnet Jointure présente des notes et explorations sur les jointures SPIP
– Sur le blog de b_b : Divagations sur les jointures avec SPIP
Auteur Publié le : 05/07/23 Mis à jour : 10/09/23