8768 sujets

Développement web côté serveur, CMS

Bonjour à tous
Je ne parviens pas à résoudre le problème suivant:
J'ai une requête SQL contenant la clause:

WHERE addressID RLIKE 'internet|jitsi' AND groupList RLIKE '(^|;)ca(;|$)'

C'est à dire que je veux sélectionner les éléments dans lesquels le champ addressID vaut "internet" ou "jitsi" et le champ groupList (qui est constitué d'une série de valeurs séparées par des ";") contient une valeur "ca".

Cette requête fonctionne très bien, mais je ne trouve pas la bonne syntaxe de la clause dans laquelle le champ groupList ne contient pas la valeur "ca"
Par exemple:

WHERE addressID RLIKE 'internet|jitsi' AND NOT groupList RLIKE '(^|;)ca(;|$)')

ne fonctionne pas, et de même quelle que soit la façon dont je place le NOT, avec ou sans parenthèses...
Merci de bien vouloir me remettre les yeux en face des trous.
Modérateur
Bonjour,

ça ne serait pas plutôt :
WHERE addressID RLIKE 'internet|jitsi' AND groupList NOT RLIKE '(^|;)ca(;|$)')

??
Bonjour,

Qu'est-ce que ça donne en inversant le groupList et le NOT comme ça :

WHERE addressID RLIKE 'internet|jitsi' AND groupList NOT RLIKE '(^|;)ca(;|$)')
gcyrillus a écrit :
Bonjour,

ça ne serait pas plutôt :
WHERE addressID RLIKE 'internet|jitsi' AND groupList NOT RLIKE '(^|;)ca(;|$)')

??

ca répond
MySQL a retourné un résultat vide (c'est à dire aucune ligne). (traitement en 0.0089 seconde(s).)
Modifié par PapyJP (05 May 2021 - 14:57)
J'ai essayé diverses solutions avec phpMyAdmin, sans résultat.
Il trouve les lignes avec
WHERE addressID RLIKE 'internet|jitsi'
ou bien avec
WHERE groupList NOT RLIKE '(^|;)ca(;|$)'
mais le AND entre les deux clauses donne pour résultat "aucune ligne"
Ce n'est pas très grave, car il y a peu de lignes avec groupList RLIKE '(^|;)ca(;|$)') , donc en utilisant
WHERE addressID RLIKE 'internet|jitsi'
je peux facilement les éliminer dans le programme de traitement, mais c'est agaçant de ne pas comprendre ce qui ne va pas, je pourrais avoir d'autre cas dans lesquels j'aurais absolument besoin d'un "AND ... NOT RLIKE
Modifié par PapyJP (07 May 2021 - 11:39)
Après réflexion c’est dû à ce que groupList peut être null
Il fallait donc écrire

WHERE groupList IS NOT NULL OR groupList NOT RLIKE '(^|;)ca(;|$)'

J’ai compris ça hier dans un cas similaire où je ne pouvais pas faire l’impasse. Smiley biggrin