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

PHP & Base de données Discussion :

[SQL] Séparer Nom Prénom placés dans une cellule unique [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut [SQL] Séparer Nom Prénom placés dans une cellule unique
    Bonjour,

    Quelqu'un a une fonction qui permet de séparer dans une collonne MySQL un NOM et un Prénom ?

    Je recherche la même chose ce expliquez sous ce post mais en PHP. (http://www.developpez.net/forums/sho...03&postcount=8)

    Merci d'avance

    Arnaud

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Je ne vois pas de fonction spécifiques pour faire ca, mais tu peux choisir un caractère spécial pour cette séparation comme l'* ou le / qui n'existent pas dans un nom ou un prénom (enfin je ne crois pas ).
    Et lors de l'insertion tu fais une concaténation a la lecture tu utilises split!

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    moué non, je ne peux pas rajouter de | ou / entre les nom et prénom car les données me sont impossé sous cette forme.

    Dans le lien donné, la macro fonctionne parfaitement, voila pourquoi j'aurai bien aimé trouvé la même chose en PHP...

    Merci encore pour ton aide !

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    salut! si j'ai bien compris tu veux séparer le nom et le prénom stockés dans une colone sql
    tu peux tout simplement faire un split de l'espace entre le nom et le prenom

    $liste=split(' ',$ta_colone_NOM_PRENOM);
    $liste[0] contiendra le nom,
    $liste[1] contiendra le prénom.

    Citation Envoyé par arnaudperfect
    moué non, je ne peux pas rajouter de | ou / entre les nom et prénom car les données me sont impossé sous cette forme.

    Dans le lien donné, la macro fonctionne parfaitement, voila pourquoi j'aurai bien aimé trouvé la même chose en PHP...

    Merci encore pour ton aide !

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est plus un travail pour les expressions régulières. Voilà pour l'idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $noms = array(
        'DUPONT DUPOND Charles Henri',
        'DUPONT DUPOND Charles-Henri',
        'DUPONT-DUPOND Charles-Henri',
        'PIERROT Jean-Jaques',
        'NOËL Robet',
        'NOËL BAPTISTE Pierre',
        'NOËL-BAPTISTE Pierre',
    );
     
    function extraire_nom_prenom($string) {
        if (preg_match("#((?:\b[[:upper:]'\s-]+\b)+)\s+((?:\b[[:upper:]][[:lower:]'\s-]+\b)+)#", $string, $m)) {
            return array('nom' => $m[1], 'prenom' => $m[2]);
        }
        return FALSE;
    }
     
    header('Content-type: text/plain');
    foreach ($noms as $n) {
        $res = extraire_nom_prenom($n);
        echo ($res ? print_r($res, TRUE) : 'KO') . PHP_EOL;
    }
    ?>
    Résultat :
    Array
    (
    [nom] => DUPONT DUPOND
    [prenom] => Charles Henri
    )

    Array
    (
    [nom] => DUPONT DUPOND
    [prenom] => Charles-Henri
    )

    Array
    (
    [nom] => DUPONT-DUPOND
    [prenom] => Charles-Henri
    )

    Array
    (
    [nom] => PIERROT
    [prenom] => Jean-Jaques
    )

    Array
    (
    [nom] => NOËL
    [prenom] => Robet
    )

    Array
    (
    [nom] => NOËL BAPTISTE
    [prenom] => Pierre
    )

    Array
    (
    [nom] => NOËL-BAPTISTE
    [prenom] => Pierre
    )

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    la j'avoue julp, tres fort...
    ce serais déplacé de te demander de nous expliquer tout ca ? a oui encore une fois, j'aime beaucoup, compact et complet, tres php5 (enfin je crois), mérite de s'y attarder.
    Conception / Dev

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oui pas mal ! ca devrait être ajouter au source php... ezt avec une petite explication ca serai encore mieux... merci encore !

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par ascito
    a oui encore une fois, j'aime beaucoup, compact et complet, tres php5 (enfin je crois), mérite de s'y attarder.
    Ce n'est en rien spécifique à PHP 5. L'extension PCRE (fonctions preg_*) sont disponibles en PHP 4 comme en PHP 5.

    Citation Envoyé par arnaudperfect
    ca devrait être ajouter au source php... ezt avec une petite explication ca serai encore mieux...
    Je ne ferais pas mieux que le tutoriel existant : Initiation aux expressions régulières en PHP et je n'ai fait que suivre grosso-modo l'idée de base (cf le lien donné en début de sujet).

    C'est simple en fait on cherche deux parties dans la chaîne :
    1. Les noms, écrits entièrement en majuscules, partie : ((?:\b[[:upper:]'\s-]+\b)+)
      \b : délimiteur de mots (représente un changement d'état entre un caractère qu'on ne trouve pas dans un mot : un signe de ponctuation, un blanc, ... et l'inverse : tout ce qui est une lettre par exemple).
      [[:upper:]'\s-] : constitués de lettres majuscules ([:upper:]), d'apostrophes ('), d'espaces (\s) et de tirets (-)
      Le premier + indique qu'un nom est constitué d'au moins l'un des caractères précédents
      Le deuxième + dénote le fait que le nom peut être constitué de plusieurs mots en majuscules (au moins un).
    2. Les prénoms, commençant par une lettre majuscule (on peut rendre ce critère facultatif en ajoutant un ? derrière le deuxième [[:upper:]]) puis entièrement en minuscules : ((?:\b[[:upper:]][[:lower:]'\s-]+\b)+)
      Tout est strictement identique à la partie correspondant aux noms hormis le fait que [[:upper:]] dit que le prénom doit commencer par une majuscule et que [[:lower:]'\s-] fait en sorte que le restant du prénom soit constitué de minuscules, d'apostrophes, de blancs ou de tirets.

    Pourquoi avoir autorisé les blancs (\s) dans le nom ou le prénom ? Tout simplement pour que les noms (ou prénoms) composés puissent être regroupés dans une seule et même capture.

  9. #9
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par julp Voir le message
    C'est plus un travail pour les expressions régulières. Voilà pour l'idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $noms = array(
        'DUPONT DUPOND Charles Henri',
        'DUPONT DUPOND Charles-Henri',
        'DUPONT-DUPOND Charles-Henri',
        'PIERROT Jean-Jaques',
        'NOËL Robet',
        'NOËL BAPTISTE Pierre',
        'NOËL-BAPTISTE Pierre',
    );
     
    function extraire_nom_prenom($string) {
        if (preg_match("#((?:\b[[:upper:]'\s-]+\b)+)\s+((?:\b[[:upper:]][[:lower:]'\s-]+\b)+)#", $string, $m)) {
            return array('nom' => $m[1], 'prenom' => $m[2]);
        }
        return FALSE;
    }
     
    header('Content-type: text/plain');
    foreach ($noms as $n) {
        $res = extraire_nom_prenom($n);
        echo ($res ? print_r($res, TRUE) : 'KO') . PHP_EOL;
    }
    ?>
    Résultat :
    Bonjour,

    j'ai un souci avec cette fonction, elle bloque sur les prénoms avec des accents (exemple Théo : je récupère Th).
    Vous avez une idée ?

    Merci

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Aucune fonction quelle qu'elle soit ne saura garantir un résultat valable à 100%, car dans une colonne "fourre-tout" contenant à la fois le nom et le prénom :

    • le nom et le prénom peuvent être simples ou composés ;
    • il n'y a aucune garantie d'avoir le nom puis le prénom ou l'inverse en fonction des lignes ;
    • il n'y a aucune garantie d'avoir des majuscules pour l'un et des minuscules pour l'autre ;
    • etc.


    Ce n'est pas pour rien que la première règle de modélisation d'une base de données relationnelle, (règle dite de "première forme normale") est que tout attribut doit avoir une valeur "atomique"

    Voir ICI

    Donc, dans la mesure du possible, la solution est de modifier cette table mal construite pour avoir deux colonnes distinctes.

  11. #11
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    merci pour la réponse.
    Mais mon problème ne vient pas de la partie BDD déjà en restitution php j'ai le souci sur les caractères accentués.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    J'ai bien compris, mais ça ne change rien à ma réponse qui précède : une BDD mal conçue implique des requêtes complexes, contre performantes et souvent, comme c'est le cas ici, dont le résultat n'est pas fiable à 100%.
    À l'arrivée, les utilisateurs comme les informaticiens sont mécontents.

    C'est pourquoi il est fondamental de consacrer le temps nécessaire à la modélisation de la BDD dans les règles de l'art.
    Mais c'est malheureusement rarement le cas et pour cause : la BDD n'est pas visible par les utilisateurs ni par les décideurs, en conséquence, on lui attribue un budget restreint au minimum, à l'inverse des IHM bien visibles de tous auxquelles on alloue du budget des fois pour de simples opérations cosmétiques sans intérêt réel.
    C'est une très lourde erreur.
    Donc si vous en avez la possibilité modifiez ou faites modifier la BDD : un vol de première forme normale comme c'est le cas ici est ce qu'il y a de pire.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/04/2008, 14h31
  2. ouverture d'un classeur dont son nom se trouve dans une cellule
    Par mosta2010 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2008, 16h55
  3. [VBA-E] Séparer Nom Prénom placés dans une cellule unique
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2007, 20h23
  4. [VBA]Séparer le Nom et le Prénom placés dans une cellule unique
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/04/2007, 10h34
  5. ASP/ SQL Server : resultat de RS dans une cellule.
    Par joe_le_mort dans le forum ASP
    Réponses: 2
    Dernier message: 11/08/2005, 13h26

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