Aller au contenu

Combiner des requetes

Le langage de requête permet de combiner les résultats de plusieurs requêtes différentes : vous pouvez calculer l’intersection, la réunion ou la différence des résultats des requêtes.

L’intersection de deux requêtes§

Pour trouver l’intersection des résultats de deux requêtes, il faut les noter dans une seule requête, en les séparant d’un espace. Une intersection vous permet de rechercher des éléments de Yesplan qui doivent répondre à plusieurs conditions. Autrement dit, lorsqu’une première et une deuxième requête doivent être vraies en même temps.

Par exemple, pour trouver tous les événements contenant le nom « Shakespeare » et qui ont lieu cette semaine, vous pouvez effectuer la requête composée suivante :

event:date:#thisweek event:name:Shakespeare

La première partie de cette requête composée est la condition event:date:#thisweek, qui retrouvera tous les événements ayant lieu cette semaine. La deuxième condition de cette composition, event:name:shakespeare, limitera davantage les résultats de la première partie aux événements contenant aussi le nom « Shakespeare ».

Astuce

Techniquement parlant, l’intersection est calculée en calculant d’abord les résultats de la première requête pour les limiter ensuite davantage aux résultats qui répondent également à la deuxième requête. Cela signifie qu’il est opportun, pour obtenir des résultats le plus rapidement possible, d’utiliser comme premier élément de la composition la requête qui limitera au maximum le nombre de résultats.

Prenons, par exemple, les deux requêtes suivantes, qui cherchent tous les événements pour lesquels le champ de données personnalisées « Responsible » contient la valeur « Jan Janssens » et qui ont lieu aujourd’hui.

event:responsible:"Jan Janssens" event:date:#today

et

event:date:#today event:responsible:"Jan Janssens"

Bien que les deux requêtes donneront les mêmes résultats, la deuxième offre une meilleure solution, les événements étant déjà limités à ceux qui ont lieu aujourd’hui, avant d’appliquer un nouveau filtre en fonction de la valeur du champ de données personnalisées. La première requête devra d’abord parcourir tous les événements pour trouver ceux pour lesquels la valeur « Jan Janssens » a été complétée dans le champ « Responsible », avant de les limiter davantage aux événements qui ont lieu aujourd’hui.

En règle générale, il vaut donc mieux, en composant des requêtes relatives à une période de temps déterminée, placer en premier lieu la partie qui limite les événements à une période déterminée, avant d’appliquer un nouveau filtre à ceux-ci.

La réunion de deux requêtes§

L’utilisation d’un + entre deux requêtes nous donne comme résultat la réunion des résultats des deux requêtes. Une réunion est utile pour rechercher des éléments qui répondent soit à la première condition soit à la deuxième. Pour illustrer la réunion, nous donnons un exemple dans lequel nous voulons retrouver toutes les ressources de Yesplan qui sont soit du type « Matériel » (material) soit du type « Humain » (human) :

resource:type:material + resource:type:human

Remarque

Il est important de prévoir un espace à la fois avant et après le + pour séparer les deux requêtes.

La différence de deux requêtes§

L’utilisation d’un - entre deux requêtes nous donne comme résultat la différence entre les résultats des deux requêtes. La différence correspond à tous les éléments qui répondent à la première requête de la composition, mais pas à la deuxième. Par exemple, la requête suivante recherche tous les événements qui ont lieu ce mois-ci, mais pas cette semaine :

event:date:#thismonth - event:date:#thisweek

Remarque

Il est important de prévoir un espace à la fois avant et après le - pour séparer les deux requêtes.

Compositions avec plus de deux requêtes§

La composition de requêtes n’est pas limitée à deux composantes. Vous pouvez combiner n’importe quel nombre de requêtes de manière arbitraire.

Si nous utilisons uniquement la réunion (+) ou l’intersection (espace) dans une requête composée, il suffit d’aligner simplement les différentes parties de la requête les unes à la suite des autres.

Par exemple :

event:location:"Salle de Bal" + event:location:"Salle de Théâtre" + event:location:"Salle de Gym"

En revanche, si nous utilisons plusieurs opérateurs différents (+, - ou espace) en même temps dans une requête, il est nécessaire d’indiquer quels éléments de la requête vont ensemble. À cet effet, on utilise des parenthèses, ( et ).

Par exemple, si nous voulons rechercher tous les événements qui ont lieu dans la Salle de Bal et qui se déroulent cette semaine ou dont le nom contient « Hamlet », nous pouvons procéder comme suit :

event:location:"Salle de Bal" (event:date:#thisweek + event:name:hamlet)

Si nous omettons les parenthèses – soit : event:location:"Salle de Bal" event:date:#thisweek + event:name:hamlet – le sens de la requête devient ambigu. L’ordre d’exécution de l’intersection et de la réunion n’ayant pas été défini, Yesplan choisira donc lui-même entre deux sens possibles :

  • tous les événements qui ont lieu dans la Salle de Bal et qui soit se déroulent cette semaine, soit dont le nom contient « Hamlet » ;
  • tous les événements qui soit ont lieu dans la Salle de Bal cette semaine, soit dont le nom contient « Hamlet ».

Ainsi, la requête suivante retrouvera tous les événements qui contiennent « Hamlet » ou ceux qui ont lieu ce mois-ci, mais pas cette semaine :

event:name:hamlet + (event:date:#thismonth - event:date:#thisweek)

Si nous voulons exprimer que nous cherchons tous les événements qui soit contiennent « Hamlet » soit ont lieu ce mois-ci, mais qui n’ont pas lieu cette semaine, nous pouvons modifier la requête ci-dessus comme suit :

(event:name:hamlet + event:date:#thismonth) - event:date:#thisweek