{where}

SPIP’s eigen criteria maken het mogelijk om met de grootste eenvoud en efficiëntie de meeste selecties in de database te maken. Er zijn echter uitzonderlijke situaties waarin de webmaster een opvraging wil doen die de SPIP compiler niet efficiënt of eenvoudig kan maken. Vanaf SPIP 3.0 kan hiervoor de voorwaarde {where} worden gebruikt.

De voorwaarde where verwacht één enkel argument, de conditie van een (MY)SQL-query. SPIP gebruikt deze waarde en combineert ze met de andere voorwaarden die mogelijk in ed lus zijn opgenomen.

Voorbeelden

Met de voorwaarde where kan eenvoudig een OR worden toegepast:

<BOUCLE_ou(ARTICLES){statut=redac}{where id_rubrique=10 OR id_rubrique=20}>

Er kunnen eenvoudig MYSQL functies mee worden gedaan:

<BOUCLE_yr(ARTICLES){where YEAR(date_creation)>1970}

Je kunt er sub-queries mee maken (in dit geval in plugin info_site):
{where id_organisation IN (SELECT id_objet FROM spip_projets_liens WHERE objet='organisation' AND id_projet=#ID_PROJET)}

Met de voorwaarde where kun je een voorwaarde maken waarbij de twee testelementen velden uit een tabel zijn: zoek artikelen die dezelfde id_rubrique en id_secteur hebben

<BOUCLE_where(ARTICLES){where id_rubrique = id_secteur}>

Merk op dat het in al deze gevallen mogelijk zou zijn geweest om af te zien van where:
-  avec {id_rubrique IN #LISTE{10,20}}
-  avec {date_creation>1970-01-01}
-  met een join (verbinding) in de SPIP-lus
-  met een allesomvattende lus

Notatie van de conditie
Wanneer er een komma in de uitdrukking voorkomt, wat vaak gebeurt in een MYSQL-functieoproep, moet je de voorwaarde opnemen in een tag #VAL.
Voorbeeld:
{where #VAL{"DATE_ADD(date_debut,INTERVAL 2 WEEK)<date_fin"}}

Zijn de voorwaarden complex, dan moet je de query voorbereiden in een #SET:

#SET{where,ici calcul complexe}
<BOUCLE_articles_racine(ARTICLES) {...}{where #GET{where}}>

Conditionele where
Je kunt ook een vergelijking maken met de omgevingswaarden, indien van toepassing: {where?}

Auteur Hanjo Gepubliceerd op:

Vertalingen: English, français, Nederlands