2010-09-08 8 views
3

J'utilise une base de données MySQL pour rechercher une liste de catégories. Ma requête est:MySQL Reg ex, doivent correspondre à des phrases dans l'ordre

select * from chat où le nom REGEXP ('(region_Long Island) +() * (sport_Outdoor Track)'); Où les valeurs "region_Long Island" et "sport_Outdoor Track" sont transmises. Je dois pouvoir faire correspondre ces catégories, indépendamment de l'ordre dans lequel elles se trouvent. Dans le tableau, il est possible d'avoir différentes combinaisons de ces deux catégories. Je dois faire correspondre tous les enregistrements qui ont ces deux catégories, indépendamment de l'ordre dans lequel ils sont répertoriés.

Je ne suis pas en mesure de modifier la requête elle-même, seulement modifier ce qui est passé dans la fonction REGEXP.

Merci

Répondre

2

Si vous ne pouvez utiliser qu'une seule expression rationnelle et vous ne pouvez pas modifier la requête SQL, puis à correspondre à la fois A et B dans un ordre quelconque, vous avez besoin d'une expression rationnelle qui correspond AB ou BA:

'region_Long Island.*sport_Outdoor Track|sport_Outdoor Track.*region_Long Island' 

Re votre commentaire:

Qu'en est-il des cas où il y a plus de deux, dans un ordre particulier?

Si vous aviez des motifs A, B et C tout vous avez besoin de trouver tous les trois dans l'ordre, vous auriez besoin d'un regexp qui correspond ABC, ACB, CAB, CBA, BAC ou BCA. Cela commence rapidement à ressembler à n! permutations si vous avez n modèles.

Voilà pourquoi une seule expression régulière n'est pas une bonne solution pour ces cas. Vous allez devoir utiliser une autre approche.

Je ne suis pas en mesure de changer la requête elle-même, modifier uniquement ce qui est passé dans la fonction REGEXP.

Désolé, cela ne va pas fonctionner.

+0

Qu'en est-il des cas où il y en a plus de deux, dans un ordre particulier? Par exemple: region_Long île school_someSchool sport_Outdoor piste Si je regex en utilisant 'île region_Long * sport_Outdoor piste | sport_Outdoor piste * region_Long Island.'., Alors je vais exclure tous les résultats qui ne sont pas répertoriés comme sport_Outdoor piste region_Long Island ou region_Long Island sport_Outdoor Track, correct? –

+0

Merci, cela m'a mis dans la bonne direction –

0
SELECT * 
FROM cat 
WHERE name RLIKE 'region_Long Island' 
     AND name RLIKE 'sport_Outdoor Track' 
+0

je l'ai dit, je ne suis pas en mesure de changer l'utilisation de la fonction de REGEXP, je ne suis en mesure de transmettre des valeurs. –

Questions connexes