Le critère where attend un seul argument, qui est la partie condition d’une requête (MY)SQL. SPIP utilise cette valeur en la combinant avec les autres éléments de conditions issus des autre critères de la boucle.
Exemples
Le critère where permet de réaliser des OR :
<BOUCLE_ou(ARTICLES){statut=redac}{where id_rubrique=10 OR id_rubrique=20}>
Il permet d’appeler des fonctions MYSQL :
<BOUCLE_ou(ARTICLES){where YEAR(date_creation) > 1970}>
Il permet de faire des sous requêtes (ici dans le plugin info_site
) :
{where id_organisation IN (SELECT id_objet FROM spip_projets_liens WHERE objet='organisation' AND id_projet=#ID_PROJET)}
Le critère where permet d’utiliser une condition où les 2 termes du test sont des champs de la table : on veut trouver les articles ayant même id_rubrique et id_secteur
<BOUCLE_where(ARTICLES){where id_rubrique = id_secteur}>
Notez qu’il aurait été possible de se passer de where dans tous ces cas :
- avec {id_rubrique IN #LISTE{10,20}}
- avec {date_creation>1970-01-01}
- avec une jointure dans la boucle SPIP
- avec une boucle englobante
Préparation de la condition
Lorsqu’il y a une virgule dans l’expression where, souvent à cause d’un appel de fonction MYSQL, il faut inclure la condition dans une balise #VAL
.
Exemple :
{where #VAL{"DATE_ADD(date_debut,INTERVAL 2 WEEK)<date_fin"}}
Lorsque les conditions sont plus complexes encore, il est nécessaire de préparer la requête dans un #SET
:
#SET{where,ici calcul complexe}
<BOUCLE_articles_racine(ARTICLES) {...}{where #GET{where}}>
Critère where conditionnel
Le critère permet aussi d’utiliser la valeur de where
passée dans l’environnement, si elle existe : {where?}