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

Langage PHP Discussion :

Recherche avancée dans une base [RegEx]


Sujet :

Langage PHP

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Recherche avancée dans une base
    Bonjour à toutes et tous,

    Je dispose d'une table (mysql) dans laquelle j'ai des noms complexes, qui commencent soit par des lettres (OK pas de soucis) soit par des chiffres (la les ennuis commence pour moi )

    Je voudrais faire en sorte de proposer à mes visiteurs une fonction de recherche par première lettre du nom, par exemple tout ce qui commence par C mais là je voudrais qu'il me sortent les noms commencant effectivement par C (ça c'est Ok, le Chlorobenzene par exemple), mais en même temps les noms ou la première lettre existante sera C, le 1-3Chlorobenzene ...

    Avez vous une idée, un regex peut'il m'aider ?

    Merci d'avance.

    Renaud

  2. #2
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    SELECT * FROM table WHERE nom LIKE %Lettre%
    Aucune aide par MP, utilisez le forum.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par J0r_x
    SELECT * FROM table WHERE nom LIKE %Lettre%
    ben non pas ça car la il va cherche tous ce qui contient la lettre.

    le mieux c'est un regex en tenant compte des chiffres et tiret, puis tu recuperes ce qui reste donc ton nom filtré

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci pour cette réponse, mais ça ne corerespondant tout à fait à ce que je cherche a faire ...

    exemple 3 noms de molécules
    (je passe les notations indice et exposant de la chimie enregistrés en code HTML dans la base) :

    2,4,5,6-[U-13C4]-1,3-[U-15N2]-2,5-[2H2]Dicholoropyrimidine
    Chlorobenzene-13C6
    4-Aminophenol-d7

    La première doit pouvoir répondre sur la lettre D
    La deuxième sur C
    La troisième sur A

    Le tout et d'arriver à faire ça dans une seule requete ...

    Des idées

    Renaud

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par rbaatouc
    ben non pas ça car la il va cherche tous ce qui contient la lettre.

    le mieux c'est un regex en tenant compte des chiffres et tiret, puis tu recuperes ce qui reste donc ton nom filtré
    Je vais essayer de m'y mettre, merci en tous cas rbaatouc

  6. #6
    Invité
    Invité(e)
    Par défaut
    ah ok l'exemple est plus parlant.
    les lettres sont tjs entre crochet?

    si c'ets le cas les regex marche quand meme
    si c'est pas le cas bon courage

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Elle est bien velue celle-là ! J'utilise l'hypothèse des crochets suggérée par rbaatouc.

    Déjà, il faut savoir qu'un crochet gauche s'écrit [[.left-square-bracket.]] et un crochet droit [[.right-square-bracket.]]. On peut aussi utiliser [[.[.]] et [[.].]], mais je défie quiconque d'être capable de lire un truc comme ça !

    Je prends ton premier exemple qui est le plus complet : avant le D, il peut y avoir deux sortes d'éléments :
    - soit un caractère qui n'est pas une lettre, donc [^A-Z]
    - soit une séquence composée d'un crochet gauche, une série de caractères différents du crochet droit, puis un crochet droit:
    [[.left-square-bracket.]][^[.right-square-bracket.]]+[[.right-square-bracket.]]

    Il peut y avoir un nombre quelconque ou nul de ces éléments, suivis ensuite du D : ^(elem1|elem2)*D

    Au total, cela nous fait donc :
    SELECT Nom
    FROM table
    WHERE Nom REGEXP '^([^A-Z]|[[.left-square-bracket.]][^[.right-square-bracket.]]+[[.right-square-bracket.]])*D' ;

    PS : j'évite volontairement les balises CODE afin que ma regex tienne sur une ligne
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Antoun
    Elle est bien velue celle-là ! J'utilise l'hypothèse des crochets suggérée par rbaatouc.
    juste par curiosité ça veut dire quoi "elle est bien velue?"

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    ne me criez pas, je suis très simple d'esprit

    mais il ne serait pas plus simple de rajouter un champ lettre (ou recherche) qui contient la lettre sur laquelle la recherche peut porter?

    les recherches seraient très rapides.
    lors de l'ajout d'un enregistrement ça fait juste une lettre à tapper en plus.

    et pour éviter de se pallucher la mise à jour des enregistrements déjà existant
    utiliser le regexp qu'a créé antoun dans un update pour mettre à jour le nouveau champ dans les enregistrements existants



    je sais je suis naif, mais des fois ça marche...
    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.


    Spidercochon, spidercochon, il peut marcher au plafond
    ...MM ......Voici Spidercochon. Aidez le à conquérir le monde
    E(....)~....en le reproduisant.
    ...w

  10. #10
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci de cette proposition mais le nom de mes molécules varie énormément je peut en avoir partout de ces numériques ainsi que crochet tirets et Cie ...

    Je rigole à voir le message de Léortien, j'ai décidé ce matin de corriger mes bases pour prendre en compte une lettre d'interclassement définie au moment de l'enregistrement de la molécule ...

    C'est vrai que pourquoi se compliquer la vie et en plus ça permet à nos chimistes de décider ou l'interclassement doit avoir lieu (exemple dichloropyrimidine, classé à P pyrimidine et non à D Dichloro...

    Merci de votre aide en tous cas ...

    renaud

  11. #11
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 450
    Points : 4 600
    Points
    4 600
    Par défaut
    salut,
    je suis peu etre a l'ouest mais il me semblerais plus simple si tu faisait une table ou ya tout tes "truck" ou tu veux faire ta recherche par lettre ou par chiffre;
    et une autre table "molécule" ou tu met la composition de chaque molécule en fonction de ta table "truck"

    les "truck" c'est parce que la maintenant tout de suite je me souviens plus de comment ca s'appel ^^ (dsl)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Léortien
    ne me criez pas, je suis très simple d'esprit

    mais il ne serait pas plus simple de rajouter un champ lettre (ou recherche) qui contient la lettre sur laquelle la recherche peut porter?

    les recherches seraient très rapides.
    lors de l'ajout d'un enregistrement ça fait juste une lettre à tapper en plus.

    et pour éviter de se pallucher la mise à jour des enregistrements déjà existant
    utiliser le regexp qu'a créé antoun dans un update pour mettre à jour le nouveau champ dans les enregistrements existants



    je sais je suis naif, mais des fois ça marche...

    sans etre méchant ça me rappele une citation de marcel pagnol :
    "Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait."

  13. #13
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par DEMMOTTE
    salut,
    je suis peu etre a l'ouest mais il me semblerais plus simple si tu faisait une table ou ya tout tes "truck" ou tu veux faire ta recherche par lettre ou par chiffre;
    et une autre table "molécule" ou tu met la composition de chaque molécule en fonction de ta table "truck"

    les "truck" c'est parce que la maintenant tout de suite je me souviens plus de comment ca s'appel ^^ (dsl)
    oui je vois ce que tu veux dire en faisaint une relation entre les 2 tables 1à1 pourquoi pas, mais là c'est bon j'ai commencé en utilsant la solution d'un champ supllémentaire reprenant une lettre pour l'interclassement ...

    Merci tout de même

  14. #14
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par rbaatouc
    sans etre méchant ça me rappele une citation de marcel pagnol :
    "Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait."
    exactement

  15. #15
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Citation Envoyé par rbaatouc
    juste par curiosité ça veut dire quoi "elle est bien velue?"
    euh... "cette expression régulière n'a pas été simple à mettre au point " ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recherche colonne dans une base
    Par stephyugh dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 29/08/2014, 10h59
  2. Recherche efficace dans une base de donnée excel
    Par endersox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2008, 07h36
  3. Recherche croisé dans une base de donnée
    Par elephant13 dans le forum C#
    Réponses: 1
    Dernier message: 24/03/2007, 16h26
  4. [Oracle] Recherche nulle dans une base et affichage
    Par GLDavid dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/04/2006, 02h01
  5. Réponses: 7
    Dernier message: 15/02/2006, 12h52

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