Requete sql avec REGEXP

WRInaute discret
Bonjour

Je bute sur une requete sql.

Je souhaite rechercher dans une table un champ contenant a la fois fenetre ET vpc.

Là, c'est avec OU ( le symbole | ):

Code:
SELECT id FROM table WHERE champ REGEXP 'fenetre | vpc'

Comment modifier cette requete pour que ca cherche les 2 ?

Merci
 
WRInaute accro
Pas sur qu'une regexp soit le plus rapide ici. J'aurais plus tendance, sur une requête aussi simple, à faire :
Code:
SELECT id FROM table WHERE champ LIKE '%fenetre%' AND champ LIKE '%vpc%'
 
WRInaute impliqué
achaternet a dit:
Merci de ton aide.

J'avais pensé a cela, mais 2 LIKE, cela n ait pas top :?

T'as pas trop le choix, car tu fais bien 2 requêtes différentes, selon l'ordre des mots.
 
WRInaute discret
Tilt a dit:
achaternet a dit:
Merci de ton aide.

J'avais pensé a cela, mais 2 LIKE, cela n ait pas top :?

T'as pas trop le choix, car tu fais bien 2 requêtes différentes, selon l'ordre des mots.


C'est pour cela que je m' etais dirigé vers REGEXP espérant pouvoir faire la recherche en 1 seul requête.
 
WRInaute accro
Tu ne peut pas, avec une regex, chercher deux expressions dans n'importe quel ordre.
Si tu connais l'ordre de tes deux mots, tu peut donc le faire avec une regex.

Sinon il faut faire deux conditions.
Mais pas deux requêtes. Tu n'en fait qu'une seule, avec deux conditions LIKE dedans.
 
Nouveau WRInaute
Ce qui est bien avec le '|' (OU) du REGEXP, c'est que ca filtre sur l'ensemble des combinaisons "fenetre" + "vpc" + "fenetre" et "vpc".

On pourrait l'utiliser dans une sous requête et le coupler aux LIKEs:

Code:
SELECT id
FROM table
WHERE id
IN (

SELECT id
FROM table
WHERE champ
REGEXP "fenetre|vpc"
)
AND champ LIKE '%fenetre%'
AND champ LIKE '%vpc%'

ca permettrait d'optimiser la recherche si le volume est important et surtout si le nombre de mots recherchés augmente.

Un EXPLAIN sur cette requête te confirmera le déroulement de la procédure:
1/ requete avec le REGEXP sur toute la table
2/ requete avec les LIKE sur le résultat du REGEXP.
A tester... :wink:
 
Discussions similaires
Haut