{where}

Em certos casos, os critérios próprios do SPIP não permitem descrever ima consulta complexa. Os loops podem usar o critério {where} para especificar diretamente o WHERE da cláusula SQL.

  • Apparu en : SPIP 3.0

O critério where aceita um único argumento, que é a parte condicional de uma consulta (My)SQL. O SPIP usa esse valor em combinação com os outros elementos de condições provenientes dos outros critérios do loop.

Exemplos

O critério where permite realizar OR:

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

Permite chamar funções MySQL:

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

Permite fazer subconsultas (aqui, no plugin info_site):

{where id_organisation IN (SELECT id_objet FROM spip_projets_liens WHERE objet='organisation' AND id_projet=#ID_PROJET)}

O critério where permite usar uma condição onde os 2 termos do teste são campos da tabela: queremos encontrar as matérias do mesmo id_rubrique e id_secteur

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

Note que teria sido possível prescindir do where em todos estes casos:
-  com {id_rubrique IN #LISTE{10,20}}
-  com {date_creation>1970-01-01}
-  com uma junção no loop SPIP
-  com um loop envolvente

Preparação da condição
Quando há uma vírgula na expressão where, frequentemente por causa de uma chamada a uma função MySQL, é preciso incluir a condição numa tag #VAL.
Exemplo:

{where #VAL{"DATE_ADD(date_debut,INTERVAL 2 WEEK)<date_fin"}}

Quando as condições são ainda mais complexas, é preciso preparar a consulta num #SET :

#SET{where,aqui cálculo complexo}
<BOUCLE_articles_racine(ARTICLES) {...}{where #GET{where}}>

Critério where condicional

O critério permite também usar o valor de where passado no ambiente, se existir: {where?}

Autor Ricardo Porto Publié le :

Traductions : English, français, Nederlands, Português