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 :

Changer l'ordre d'une valeur texte


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Points : 177
    Points
    177
    Par défaut Changer l'ordre d'une valeur texte
    Bonjour,

    dans ma table j'ai une colonne nomprenom
    avec comme valeur "nom prenom"
    j'aimerai changer l'ordre toutes les valeurs de cette colonne en "prenom nom"
    du coup j'aurais au lieu de
    MOZART Wolfgang Amadeus
    Wolfgang Amadeus MOZART

    je m'approche de ce que je veux faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE compositeur_test SET resultat = CONCAT(SUBSTRING_INDEX(nom_compositeur, ' ', -1),' ',SUBSTRING_INDEX(nom_compositeur, ' ', 1))
    mais j'obtiens : MOZART Wolfgang

    Merci de votre aide

  2. #2
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Hello !

    Il y a un problème de conception dans ta base, il faut stocker le nom dans une colonne et le prénom dans une autre !

    Maintenant que tu as les 2 dans le même champs ça va être difficile de s'y retrouver.
    Tu essaye de spliter sur le caractère [espace] mais si tu a des gens avec des noms composés, ton résultat sera faux :
    exemple : "de la Halle Adam" va devenir "la Halle Adam de" au lien de "Adam de la Halle".

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut nicerico.

    Voici deux solutions :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `id`       integer unsigned NOT NULL AUTO_INCREMENT Primary Key,
      `champs`   varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`champs`) VALUES
    ('jean françois'),
    ('MOZART Wolfgang Amadeus'),
    ('de la Halle Adam')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+-------------------------+
    | id | champs                  |
    +----+-------------------------+
    |  1 | jean françois           |
    |  2 | MOZART Wolfgang Amadeus |
    |  3 | de la Halle Adam        |
    +----+-------------------------+
    --------------
    select concat('-->',
           reverse(substr(reverse(champs), 1, locate(' ', reverse(champs))-1)), ' ',
           reverse(substr(reverse(champs),    locate(' ', reverse(champs))+1)),
               '<--') as 'résultat 1'
    from test
    --------------
     
    +-------------------------------+
    | résultat 1                    |
    +-------------------------------+
    | -->françois jean<--           |
    | -->Amadeus MOZART Wolfgang<-- |
    | -->Adam de la Halle<--        |
    +-------------------------------+
    --------------
    select concat('-->',
           substr(champs,    locate(' ', champs)+1), ' ',
           substr(champs, 1, locate(' ', champs)-1),
               '<--') as 'résultat 2'
    from test
    --------------
     
    +-------------------------------+
    | résultat 2                    |
    +-------------------------------+
    | -->françois jean<--           |
    | -->Wolfgang Amadeus MOZART<-- |
    | -->la Halle Adam de<--        |
    +-------------------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    J'abonde dans le sens de Sebwar, et j'ajoute qu'en plus, vous avez très probablement, pour ne pas dire certainement, dans votre table, des cas d'inversion.
    En effet une colonne unique nom+prénom, implique qu'aucun contrôle n'est possible, du coup vous avez des "Henri Martin" dont le nom est martin et le prénom Henri et d'autres pour lesquels c'est l'inverse, au gré de la saisie de l'un et de l'autre !
    Comment allez vous démêler ces cas ...
    Aucune solution
    L'atomicité des informations est l'une des mamelles de la modélisation

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Citation Envoyé par Escartefigue
    J'abonde dans le sens de Sebwar
    Il ne s'agit pas d'abonder dans tel sens, même si Sebwar à totalement raison.

    Il s'agit de fournir une solution qui réponde à la demande de nicerico.
    Ce qu'il en ferra par la suite est de sa responsabilité et ne nous regarde pas.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    j'espère qu'il n'y a pas des trucs genre "George Walker Bush" ou "John Fitzgerald Kennedy" sinon c'est vraiment foutu !

    edit: je n'ai rien dit "Walker" et "Fitzgerald" ce sont des nom de famille pas des prénom, je pensais que c’était des prénoms au début

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut sebwar.

    Citation Envoyé par Sebwar
    Il y a un problème de conception dans ta base, il faut stocker le nom dans une colonne et le prénom dans une autre !
    Je ne dis pas le contraire, mais parfois, il faut faire avec.

    Maintenant, Nicerico devra soit modifier sa base de données, s'il le peut, ou bien ponctuellement intervertir la place du prénom dans la colonne.
    Tout ce que l'on peut faire, c'est répondre à son attente.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.


    Il s'agit de fournir une solution qui réponde à la demande de nicerico.
    Ce qu'il en ferra par la suite est de sa responsabilité et ne nous regarde pas.

    @+
    Sauf que, comme précisé dans mon post, ici il n'y en a probablement pas
    Il faut analyser le contenu de la colonne pour voir le nombre de cas litigieux, et il est probable que le nombre de cas où prénom et nom ne sont pas identifiables sera très important

    J'ai participé à de nombreux projets de convergence de systèmes d'informations, et ce type de problème est classique dans ces projets.
    Souvent, dans cette situation, la seule solution viable est la qualification des données par les gestionnaires. Qualification,ça signifie contrôle et correction manuelle au travers des applications de gestion.
    L'apport de la MOE dans ce type de cas est d'identifier, quantifier et lister les cas litigieux pour aider les gestionnaires à réaliser cette qualification.
    Donner une réponse technique au travers d'une requête SQL est une bonne chose sous réserve de ne pas envoyer le demandeur sur une fausse piste.
    En d'autres termes, il faut savoir parfois se garder de donner une réponse

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut Escartefigue.

    Je ne parle pas de la remarque soulevé par Sebwar qui est la bonne démarche à faire.
    Je sais très bien que la demande de nicerico ne tient pas la route pour ce qu'il veut faire. Mais le problème n'est pas là.

    Quand quelqu'un pose une question, essaye de répondre à son attente. C'est le but de tout forum !
    Il n'est pas tenu de donner toutes les explications sur le pourquoi de sa demande.
    S'il pose une question, c'est qu'il n'a pas la réponse, autrement dit il n'a pas le savoir faire.

    Maintenant, si tu dis que ce n'est pas la bonne méthode mais que tu ne donnes aucune solution technique, cela ne va pas l'aider.
    C'est pourquoi, je préfère donner une solution qui fonctionne, même si elle est bancale.
    Car j'ai répondu à son attente et c'est tout.

    Maintenant, s'il veut améliorer son MCD, c'est un autre problème qu'il doit formuler s'il en ressent le désire.

    Est-ce que tu serais satisfait, si en allant dans un commerce pour acheter des oranges, un vendeur te propose des bannes ?
    Je ne suis pas certain que tu serais d'accord avec cette façon de faire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Est-ce que tu serais satisfait, si en allant dans un commerce pour acheter des oranges, un vendeur te propose des bannes ?
    Pour rester dans l'analogie, si le vendeur de fruits connaissant l'ulcère à l'estomac de son client, lui recommande de ne pas acheter d'oranges dont l'acidité ne ferait qu’aggraver l'ulcère, et bien oui, le client est content, et pourtant il voulait des oranges. Les bananes bien mois acides que les oranges, sont dans ce cas tout à fait adaptées
    Je préfère ce vendeur de fruits là, que celui qui me vendra des oranges pour ne pas me contrarier

    Pour en revenir à la solution proposée, comme je l'indique plus haut, il faut analyser la fréquence des cas, et d'expérience, je parle de projets vécus, en entreprise, dans la vraie vie donc, la solution SQL proposée n'est pas satisfaisante.
    Il est parfois plus sage de dire non

Discussions similaires

  1. [MySQL] Changer l'ordre d'une liste
    Par robmayol dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/06/2008, 17h52
  2. Changer l'ordre d'une liste
    Par ethno dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/01/2008, 12h19
  3. Réponses: 2
    Dernier message: 09/11/2007, 10h18
  4. implémenter un numéro auto avec une valeur texte
    Par Stagiaireparc dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/07/2007, 22h21
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

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