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 :

Regexp sur une BDD


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Regexp sur une BDD
    Bonjour à tous,

    Dans un forum, j'ai trouvé cette question intéressante et sans réponse :

    Comment puis-je récupérer une portion d'informations depuis un champ info qui contient cette chaine :

    Paul|0552578912|Paul2002@yahoo.fr

    Pour les cas suivants :

    1 - Les noms.
    2 - Le numéro de téléphone.
    3 - l'email.

    Merci.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    deux solutions, soit tu récupères toute la colonne et tu la traites dans un langage de programmation, soit tu vais un sql compliqué parce que mysql ne gère pas les parenthèses capturantes.

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Tu peux créer une fonction qui va découper ta chaine sur tes séparateurs |

    La ou je travaille, on a créé une fonction SQL serveur qui découpe les chaines en fonction d'un caractère que l'on lui passe en paramètre. En utilisant les fonction SQL sur les chaines (substring, len, etc...)

    Sinon il existe bien des Regex sur la plupart des systèmes de base de données mais je ne suis pas sur qu'elles permettent "d'extraire" un bout de chaine.
    Ce qui est sur c'est qu'elle permettent de renvoyer vrai ou faux pour savoir si une chaine match bien avec ton regex.

  4. #4
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Seb33300,

    Pourrais-je avoir le code de cette fonction SQL ?

    Merci.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    Ne serait-ce pas plus simple de faire ça en php avec un simple explode ?
    Ou peut-être ai-je mal compris le problème...

  6. #6
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Citation Envoyé par Fabllot Voir le message
    Bonjour,

    Ne serait-ce pas plus simple de faire ça en php avec un simple explode ?
    Ou peut-être ai-je mal compris le problème...
    Dans ce cas, tout les champs de la table seront récupérer, puis un traitement général du résultat sera lancer

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    La ou je travaille, on a créé une fonction SQL serveur qui découpe les chaines en fonction d'un caractère que l'on lui passe en paramètre. En utilisant les fonction SQL sur les chaines (substring, len, etc...)
    Comment puis-je récupérer une portion d'informations depuis un champ info qui contient cette chaine :

    Paul|0552578912|Paul2002@yahoo.fr
    Aïe, vous êtes pas 1NF !

    Dans ce cas, tout les champs de la table seront récupérer, puis un traitement général du résultat sera lancer
    Ce qui n'est pas nécessairement plus lent. A toi de faire un benchmark pour évaluer quelle option est la meilleure.

    Je passais juste vous avertir que l'emploi de fonction de regexp au niveau de la base de données était très très lent ! Il à été démontré que PHP s'en sors mieux pour filtrer des données par regexp que MySQL.

    Par ailleurs, PHP vous offre gracieusement preg_grep et preg_filter, autant s'en servir

    D'une manière générale, il est recommandé de suivre les formes normales pour modéliser une base de données optimale en termes de lectures / ecritures: http://fr.wikipedia.org/wiki/Forme_n...ationnelles%29

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Entièrement d'accord avec Benjamin Delespierre.

    Tu ne devrais pas avoir à te poser cette question. Si tu te la pose c'est que ta table n'est pas conçue correctement.
    Donc dans ce cas c'est le schéma de la table qui est à revoir sinon la recherche et la récupération des données sera un gouffre à performance...

Discussions similaires

  1. Vérification de données sur une BDD
    Par dj_cue dans le forum Bases de données
    Réponses: 1
    Dernier message: 04/02/2007, 12h08
  2. recuperation d'un login/mdp sur une BDD
    Par bonjour69 dans le forum C++
    Réponses: 5
    Dernier message: 12/11/2006, 16h30
  3. REGEXP sur une sous requête :s
    Par GrimR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/08/2006, 20h22
  4. Requête sur une bdd HF sans WinDev
    Par moabomotal dans le forum WinDev
    Réponses: 4
    Dernier message: 08/08/2006, 17h55

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