{critère ?}

(ceci est un message automatique)

Message posté par denisb <denisb@laposte.net> à la suite de l'article «
{critère ?} ».

http://www.spip.net/ecrire/?exec=articles&id_article=3996#id174006

** {critère ?}

* nouvelle proposition de rédaction de l'article id_rubrique ? ou
id_rubrique ?= #ENVid_rubrique

S'il existe un id_rubrique (nn) dans l'environnement d'exécution de la
boucle, le critère ne sélectionnera que les données correspondantes à
l'égalité id_rubrique = #ENVid_rubrique SELECT articles.titre,
articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique = nn

S'il n'existe pas d'id_rubrique dans l'environnement d'exécution de la
boucle, le critère sera totalement ignoré SELECT articles.titre,
articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

On notera que {id_rubrique ?} est équivalent à {id_rubrique?} à
{id_rubrique ?= #ENV{id_rubrique}} et à {id_rubrique?=#ENV{id_rubrique}}

Quel intérêt alors à utiliser ce dernier type de notation ?

Si, plutôt qu'une stricte égalité, nous voulons sélectionner les
données qui répondent à une particularité liée au critère de
sélection : par exemple {id_rubrique ?== ^#ENV{id_rubrique}}

Avec ce critère, nous voulons sélectionner toutes les rubriques dont
l'id débute avec l'id_rubrique (nn) présent dans l'environnment
d'exécution de la boucle ; SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique REGEXP '^nn'

et s'il n'y a pas d'id_rubrique dans l'environnement, alors nous ne
voulons pas que ce critère soit utilisé. SELECT articles.titre,
articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

Attention :

Si pour un critère non conditionnel il est possible d'utiliser une
variable d'environnement de nom quelconque (truc=nn) comme terme de
l'égalité : par exemple {id_rubrique = #ENV{truc}} SELECT articles.titre,
articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique = nn

pour un critère conditionnel , il est obligatoire d'utiliser une
variable de même nom que le critère.

ainsi {id_rubrique ?= #ENV{truc}} ne fonctionnera pas (le critère sera
ignoré) même si truc=nn est défini dans l'environnement. SELECT
articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'