IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

REGEXP sous MySQL


Sujet :

Requêtes MySQL

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Par défaut REGEXP sous MySQL
    Bonjour à tous,
    J'ai un problème avec REGEXP utilisé dans une requete MySQL.
    J'ai un champ de type TEXT, dans ce champ se trouve 2 enregistrements.
    L'enregistrement 1 contient "enregistrement de test" et l'autre contient "enregistrementdetest2".

    Ma requête est censé rechercher tous enregistrement qui contiennent ces 3 mots peux importe l'ordre : "de test enregistrement".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM MOTS WHERE mot REGEXP '([de]*[test]*[enregistrement])'
    Cette requête n'est pas bonne parce ce qu'il me sort le 2eme enregistrement.
    Comment lui dire qu'il faut pas qu'il y est de chiffre et de lettre tout de suite avant et après chaque mot.
    Merci

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Je n'arrive pas à l'écrire dans un seul motif, alors j'ai essayé cela qui semble fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $motif1='^(enregistrement |de |test )';
    $motif2='( enregistrement | de | test )';
    $motif3='( enregistrement| de| test)$';
    $sql = "SELECT DISTINCT * FROM MOTS 
                                      WHERE mot REGEXP '$motif1'
                                          AND mot REGEXP '$motif2'
                                          AND mot REGEXP '$motif3'";
    A la réflexion (que je vais tester) ça ne va pas car 'de de de' doit passer ce filtre.
    J'y retourne.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    C'est bien ce que je craignais 'de de de' passe comme une lettre à la poste, comme le ferait 'test test test' ou 'enregistrement enregistrement enregistrement' ou tout autre combinaison qui permettrait aux trois assertions du WHERE de retourner TRUE.
    SCROGNEUGNEU faut vraiment que je me mette aux regex !
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Bon, nouvelle proposition qui semble résoudre le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $motif1='(^de | de | de$)';
    $motif2='(^enregistrement | enregistrement | enregistrement$)';
    $motif3='(^test | test | test$)';
    $sql = "SELECT DISTINCT * FROM MOTS 
                                      WHERE mot REGEXP '$motif1'
                                          AND mot REGEXP '$motif2'
                                          AND mot REGEXP '$motif3'";
    M'énervent ces regex
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Par défaut
    Merci Maljuna pour ton aide, j'avais pas internet, je vais tester tous ça !
    J'avais trouvé une autre petite astuce en fouinant bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MOTS WHERE mot REGEXP '([[:<:]]enregistrement[[:>:]])*([[:<:]]test[[:>:]])*([[:<:]]de[[:>:]])'
    Il parait que pour la recherche d'un mot avec REGEXP, il faut mettre [[:<:]] et [[:>:]] entre le mot. Seulement ça marche sur MySQL 5 mais pas sur la version 4

Discussions similaires

  1. langage pour manipulation données sous MySql
    Par halina dans le forum Administration
    Réponses: 2
    Dernier message: 31/01/2005, 10h33
  2. Requete NOT IN sous MySQL 4.0
    Par lo72 dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/04/2004, 12h03
  3. Clé étrangère sous MySQL
    Par NPortmann dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/02/2004, 13h46
  4. Problème de création de table sous MySql
    Par ducamba dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2003, 09h59
  5. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo