L’Opérateur « ! »

Les critères conditionnels de négation simple, utilisés sur des champs extérieurs à la table (des champs créant une jointure sur une autre table) ne font pas toujours ce que l’on suppose au premier abord.

Ainsi le critère {titre_mot!=rose} sélectionne, sur une boucle ARTICLES tous les articles qui ne sont pas liés au mot clé « rose ». Mais le type de jointure créé fait qu’il sélectionne tous les articles ayant au moins un mot clé, donc au moins un mot clé qui n’est pas « rose ».

Or, bien souvent, on cherche simplement à afficher tous les articles n’ayant pas le mot « rose », même ceux qui n’ont aucun mot clé. C’est cela qu’effectue l’opérateur {!critere}, qui permet de créer une seconde requête de sélection qui sera utilisée comme critère de sélection de la première :

<BOUCLE_articles(ARTICLES){!titre_mot = 'X'}> ...

Dans ce cas précis, les articles ayant un mot clé X sont sélectionnés, puis enlevés de la sélection SQL principale par un NOT IN (requête de sélection).

Cette écriture est aussi valable lorsqu’on force un champ de jointure, ainsi on pourrait tout aussi bien écrire :

<BOUCLE_articles(ARTICLES){!mots.titre = 'X'}> ...

Exemple

Sélectionner les rubriques qui n’ont aucun article dont le titre commence par un « L » ou un « l ». Attention tout de même, cette requête utilisant une expression régulière (^[Ll]) nécessite plus de calculs pour le gestionnaire de bases de données.

<BOUCLE_rub(RUBRIQUES){!articles.titre == '^[Ll]'}> ...

Auteur Matthieu Marcillaud Publié le : Mis à jour : 19/04/10

Traductions : English, français