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 :

manipulation chaîne de caratères


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Par défaut manipulation chaîne de caratères
    Bonjour,

    J'ai une table ayant la structure suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE IF NOT EXISTS `test` (
      `chaine` varchar(250) NOT NULL,
      `partie1` varchar(11) NOT NULL,
      `partie2` varchar(11) NOT NULL,
      `partie3` varchar(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `test`
    --
     
    INSERT INTO `test` (`chaine`, `partie1`, `partie2`, `partie3`) VALUES
    ('A10001-A10002-A10003', '', '', ''),
    ('B10001-B10002-B10003', '', '', '');

    Le champ 'chaine' contient une chaîne de caractères. J'aimerais récupérer la chaîne 'A10001' et l'injecter dans le champ 'partie1', récupérer la chaîne 'A10002' et l'injecter dans le champ 'partie2' et récupérer la chaîne 'A10003' et l'injecter dans le champ 'partie3'. Même chose pour la ligne 2...etc

    Comment faire? Merci à vous.

    Cordialement.

  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 suppose que l'exemple ne correspond pas exactement à la réalité et que les bouts de chaîne entre les '-' ne sont pas toujours de la même longueur, voire qu'il peut y avoir des bouts absents, non ?
    Il y a peut-être une piste en couplant l'action de deux fonctions MySQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE `test`
    SET partie1=MAKE_SET_PLACE(1,REPLACE(`chaine`,'-',',')),
        partie2=MAKE_SET_PLACE(2,REPLACE(`chaine`,'-',',')),
        partie3=MAKE_SET_PLACE(3,REPLACE(`chaine`,'-',','))
    à tester, bien sûr.
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    ...que les bouts de chaîne entre les '-' ne sont pas toujours de la même longueur
    Non, les chaînes de caractères ont la même longueur
    ...voire qu'il peut y avoir des bouts absents
    Exact, parfois il y a en effet uniquement 1 ou 2 chaînes de caractères séparées par '-'
    UPDATE `test`
    SET partie1=MAKE_SET_PLACE(1,REPLACE(`chaine`,'-',',')),
    partie2=MAKE_SET_PLACE(2,REPLACE(`chaine`,'-',',')),
    partie3=MAKE_SET_PLACE(3,REPLACE(`chaine`,'-',','))
    Ta requête ne donne aucun résultat, PHPMyAdmin ne réagit pas du tout lors de son exécution????

    Je ne comprend pas le rôle de 'MAKE_SET_PLACE'?? je n'ai eu aucun résultat après une recherche sur Google

    Merci.

    Cordialement.

  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
    Quand je disais à tester....P..1111 de copier-coller !!!
    MAKE_SET(bits,str1,str2,...)

    Retourne une liste (une chaîne contenant des sous-chaînes séparées par une virgule ‘,’) constituée de chaînes qui ont le bit correspondant dans la liste bits. str1 correspond au bit 0, str2 au bit 1, etc... Les chaînes NULL dans les listes str1, str2, ... sont ignorées :

    mysql> SELECT MAKE_SET(1,'a','b','c');
    -> 'a'
    mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
    -> 'hello,world'
    mysql> SELECT MAKE_SET(0,'a','b','c');
    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
    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
    Ça ne marchera pas, il faudrait trouver un équivalent d'explode() en MySQL.
    Je continue la recherche.
    @+
    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)

  6. #6
    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
    Je n'en trouve pas alors je suis sur une piste plus lourde à base de LOCATE et MID genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MID("1-2-3",locate("-","1-2-3")+1,LENGTH("1-2-3")-LOCATE("-","1-2-3",LOCATE("-","1-2-3")+1))
    qui retourne 2
    @+
    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)

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

Discussions similaires

  1. Problème tableau de chaînes de caratères
    Par developppez dans le forum C
    Réponses: 4
    Dernier message: 07/05/2007, 20h33
  2. Problème tableau de chaînes de caratères
    Par LinuxUser dans le forum C
    Réponses: 49
    Dernier message: 02/05/2007, 10h39
  3. [Smarty] Changement de chaîne de caratères
    Par FracMaster dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/04/2007, 15h59
  4. supprimer les espaces dans une chaîne de caratères.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2006, 18h43
  5. newb manipulation chaine de caratère
    Par yodark dans le forum Langage
    Réponses: 6
    Dernier message: 03/09/2005, 20h02

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