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 SQL Discussion :

Aide sur requête SQL


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut Aide sur requête SQL
    Bon là ça dépasse mes compétences…

    J'ai inscrit des infos dans un champ qui ne devait pas receuillir ces infos !
    Il faut que je transvase tout le contenu de ce champ dans un autre champ…


    Pourriez-vous me dire comment écrire ceci ?
    - couper (c'est à dire vider ensuite) le contenu du champ "extradata" de la table "phplist_user_user" pour chacun des "id"
    - puis le coller (ne pas écraser mais concaténer à une éventuellle info déjà présente) pour chaque "userid" dans le champ "value" de la table "phplist_user_user_attribute"

    Les 2 tables joignent sur "id" et ""userid"

    Ouh la la…

  2. #2
    jnore
    Invité(e)
    Par défaut
    Bonsoir,

    Si j'ai bien compris, je ferais cela en deux requetes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* 1) Mise à jour de la table phplist_user_user_attribute */
     
    UPDATE phplist_user_user_attribute sous SET value= value || SELECT extradata FROM phplist_user_user WHERE id=sous.userid;
     
    /*2) ON VIDE LES COLONNES DE LA TABLE phplist_user_user*/
     
    UPDATE phplist_user_user SET extradata=null;
    || est le symbole de concaténation

    S'il n'y a pas de doublon sur la table FROM phplist_user_user cela devrait fonctionner.

    Dis moi si ok.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Merci pour l'aide.
    J'ai eu ce messae d'erreur
    MySQL a répondu:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT extradata FROM phplist_user_user WHERE id=sous.userid' at line 1
    J'ai :
    Version du serveur: 5.0.45-log
    Version du client MySQL: 5.0.22

  4. #4
    jnore
    Invité(e)
    Par défaut
    Bonjour

    A mon avis c'est le symbole de concaténation qui ne lui plait pas!
    Regarde dans la doc MYSQL pour trouver la fonction adéquate;

  5. #5
    jnore
    Invité(e)
    Par défaut
    Après une petite recherche, cela doit se présenter sous cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    UPDATE phplist_user_user_attribute sous SET value= CONCAT(SELECT extradata FROM phplist_user_user WHERE id=sous.userid, value);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    J'ai encore le message
    #1064 - You have an error in your SQL syntax; check...
    avec CONCAT en rouge
    Je ne comprends pas pourquoi.

    Par ailleurs, en testant, j'ai fait une fausse manip en mettant CONCAT('SELECT extradata FROM…'
    Considéré comme une chaîne c'est passé… mais bien sûr ce n'était pas que je voulais faire !
    Mais il semble que seules les valeurs non nulles de phplist_user_user_attribute aient été affectées. Il faudrait quelle le soient toutes (nulles et non nulles)

  7. #7
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Salut,

    il faudrait vérifier dans un premier temps que le résultat de ton SELECT est une chaîne.

    Ensuite, je ne vois pas comment la requête pourrait faire les mises à jour que tu veux. En effet le SELECT renverra les extradata de tous les users des deux tables (cf. jointure). Comment MySQL saura-il qu'il faut concaténer l'extradata du user U à la value du user U ? Merci de me fournir quelques explications.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    J'aurais bien du mal à te fournir des explications !

    Mais oui, ce que je cherche c'est bien de dire à MySQL qu'il faut concaténer l'extradata du user U à la value du user U.

    Mais je ne sais pas comment le faire !

  9. #9
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    As-tu essayé d'exécuter la requête sur un seul user ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE phplist_user_user_attribute puua
    SET puua.value = CONCAT(SELECT puu.extradata 
                            FROM phplist_user_user puu 
                            WHERE puu.id = TON_ID, puua.value) 
    WHERE puua.userid = TON_ID;

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    J'ai repris ta requête en remplaçant TON_ID par 2 (un ID où il y avait quelque chose à concaténer). J'ai eu la réponse :
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT puu.extradata
    FROM phplist_user_user puu
    ' at line 2

  11. #11
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    la requête du SELECT toute seule, te renvoie-t-elle une chaîne de caractère (du genre 'chaine') ?

    apparemment le SELECT à l'intérieur du CONCAT, il n'aime pas trop.

    Essaie de faire

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE phplist_user_user_attribute puua
    SET puua.value = (SELECT CONCAT(puu.extradata, puua.value)
                      FROM phplist_user_user puu 
                      WHERE puu.id = TON_ID)
    WHERE puua.userid = TON_ID;
    Ou
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE phplist_user_user_attribute puua
    SET puua.value = (SELECT CONCAT(puu.extradata, puua.value)
                      FROM phplist_user_user puu 
                      WHERE puu.id = TON_ID
                      AND puua.userid = puu.id)
    WHERE puua.userid = TON_ID;

  12. #12
    jnore
    Invité(e)
    Par défaut
    Je ne connais pas trop Mysql mais il s'agit bien d'un prob de syntaxe et non de relation entre table.

    Autre question: est-ce que Mysql accepte le surnommage?
    Logiquement tout bon SGBDR le devrait mais bon.....

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    AL1986 :
    Tes 2 requêtes fonctionnent !

    Mais seulement à condition que le champ "value" de "phplist_user_user_attribute" ne soit pas NULL. Ce qui n'est malheureusement pas toujours le cas…
    Comment faire pour rendre les champs non null s'ils sont null ?

    Après comment faire pour concatener l'ensemble des entrées avec une requête ? Et pas un par un !

    Merci pour votre patience à tous deux?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Bon j'ai viré tous les NULL avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE phplist_user_user_attribute SET value ="" WHERE value is NULL;
    Il n'y aurait plus qu'à faire porter la requête de AL1986 sur l'ensemble de la table…


    Oui mais comment faire ?

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Houf… ça y est… La requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE phplist_user_user_attribute puua
    SET puua.value = (SELECT CONCAT(puu.extradata, puua.value)
                      FROM phplist_user_user puu  
                      WHERE puu.id = puua.userid);
    Merci à vous !

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

Discussions similaires

  1. Aide sur requête SQL
    Par Marco94 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/07/2010, 17h53
  2. Besoin d'aide sur requête Sql
    Par Sekigawa dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 31/12/2009, 15h14
  3. Aide sur requête SQL
    Par Pschittt dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2008, 14h56
  4. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  5. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33

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