{where}

Dans certains cas, les critères propres à SPIP ne permettent pas de décrire une requête complexe. Les boucles peuvent utiliser le critère {where} pour spécifier directement le WHERE de la clause SQL.

  • Apparu en : SPIP 3.0

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?}

Auteur JLuc Publié le : Mis à jour : 17/04/23

Traductions : English, français, Nederlands