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 :

Mise à jour table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut Mise à jour table
    Bonjour j'aimerais remplacer un champ d'une table pour mon projet de DESS, mais mes connaissances de SQL sont limitées.

    Table 1 :
    id nom
    1 dupont
    2 durand
    3 martin

    Table 2 :
    groupe_id users
    1 dupont durand
    2 dupont martin

    la table 2 est le fruit d'une fonction php (tpl_double_select avec var1 une liste et var2 un explode de cette liste)

    j'aimerais mettre à jour, à l'aide d'une requete SQL, ma table 2 de tel sorte que je n'ai pas les nom mais les id de la table 1.

    Merci à tous.
    ++

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Il n'y a pas de mal à être débutant... par contre, comme Waldar te le conseillait dans ton autre post, tu gagnerais à te faire quelques petits tutos.
    (Vu qu'à priori, t'as l'air d'être parti pour manger pas mal de SQL).

    Tu verras, tout deviens plus simple.

    En attendant, pour ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE UneTable a
    SET LaColonne = 
        (SELECT LaColonneQueTuVeux
        FROM LautreTable b
        WHERE a.CeQuiTepermetDelierLesDeuxTables= b.CeQuiTepermetDelierLesDeuxTables)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut Merci j'essaie ça
    oui effectivement je devrais me faire des tutos.

    Les cours de SQL vont bientot comencer (il serait temps...) et on va en manger avant les exams jusqu'à l'overdose

    je vous embeterais bientot plus

  4. #4
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    malheureusement il n'y a pas de lien entre ses tables.

    je voudrais avoir les id donc comme ceci :

    Table2 :
    g_id | users
    1 | 1 2
    2 | 2 3

    pour les users la valeurs s'enregistre après une usine à gaz de fonction php...
    en gros tout les "noms" selectionnés dans un menu sont enregistré dans "users" et séparé d'un espace s'il y en a plusieurs.

    Cette requete est donc impossible ?

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Ah, j'avais pas bien capté...
    Comme t'es sous MySQL, on peut ruser

    Le lien existe, c'est : a.users contient b.nom (implémenté par LIKE)
    Le problème, c'est ce ça renvoie plusieurs lignes... et le but est de les concatener.
    GROUP_CONCAT !

    Je te laisse essayer d'adapter la requête précédente en appliquant ce procédé ?
    (Si tu galère trop, tu reviens...)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    ok je vais faire le tour des tutos si pb, je progresserai mieux

    sinon je reposte demain matin

    Merci encore

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    UPDATE {table2} t2
    GROUP_CONCAT (
    SET users = (
    SELECT t1.id
    FROM {table1} t1
    WHERE t1.users LIKE t2.nom))
    Y'a de l'idée ??

    Sans le GROUP_CONCAT ça me renvoie tout les id dont les champs "users" et "nom" sont identiques à la ligne?
    et le GROUP_CONCAT me les mets à la suite ?

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    C'est l'idée !

    En SQL, tu peux regrouper les données et utiliser des fonctions d'agrégats (des fonctions d'ensemble en gros).

    Les fonctions d'agrégats usuelles sont sum, count, avg... mais MySQL a créé GROUP_CONCAT pour faire une concaténation de groupe (un peu comme une somme, mais en chaîne de caractère).

    => Ton objectif est donc de créer cette chaîne.

    Avant de faire l'update, tu peux tester la syntaxe (je suis plus sûr, mais ça se retrouve facilement sur le site MySQL ou par google) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT GROUP_CONCAT(la_col_a_concat ORDER BY DansQuelOrdreConcatener)
    FROM TaTable
    GROUP BY CeQuiDefinitTonGroupe
    (Le GROUP BY est optionnel si tu veux concaténer l'ensemble de la sélection)

    (Donc le GROUP_CONCAT se place à l'intérieur du SELECT)

    Courage !

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    j'ai créer des tables exemples avec phpmyadmin :

    Table 1 :

    |id| nom |
    |1 | dupont |
    |2 | durand |
    |3 | martin |

    Table 2 :

    |g_id |users
    |1___|dupont durand
    |2___|durand martin

    et je veux :

    Table 2 :

    |g_id |users
    |1___|1 2
    |2___|2 3

    il faudrait non pas que je "concatène", mais que je déconcatène afin de faire le changement et que je reconcatène...

    Malheureusement ça dépasse mes capacités aujourd'hui ...

  10. #10
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Création des jeux de données sans MyAdminMachin

    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
     
    CREATE TABLE table1
    (
    id int,
    nom varchar(30))
    ;
     
    CREATE TABLE table2
    (
    g_id int,
    users varchar(30))
    ;
     
    INSERT INTO table1 VALUES(1, 'dupont');
    INSERT INTO table1 VALUES(2, 'durand');
    INSERT INTO table1 VALUES(3, 'martin');
     
    INSERT INTO table2 VALUES(1, 'dupont durand');
    INSERT INTO table2 VALUES(2, 'durand martin');
    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT GROUP_CONCAT(CAST(id AS CHAR) ORDER BY ID SEPARATOR ' ')
    FROM table1
    WHERE 'dupont durand' like CONCAT('%', nom, '%')
    Ici, j'ai mis la valeur "en dur" qui correspondra au g_id, et j'ai demandé qu'il contienne le champ nom (euh colonne puisqu'il parait qu'il n'y a pas de champs...). C'est le lien dont on parlait tout à l'heure entre la ligne à UPDATER et la table à utiliser.

    Je te laisse tenter l'adaptation pour l'ensemble de l'UPDATE...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 52
    Points
    52
    Par défaut YES !!!
    La voici :

    UPDATE table2
    SET users =
    (
    SELECT GROUP_CONCAT(CAST(id AS CHAR) ORDER BY ID SEPARATOR ' ')
    FROM table1
    WHERE 'users' LIKE CONCAT('%', nom, '%')
    )
    Merci ca marche !

    ma table 2 comporte bien :
    g_id | users
    1___| 1 2
    2___| 2 3

    Merci beaucoup

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

Discussions similaires

  1. Liste déroulante éditable et mise à jour table
    Par Nean dans le forum Bases de données
    Réponses: 11
    Dernier message: 02/12/2007, 23h03
  2. Débutant - Pb de mise à jour table
    Par Michel Hubert dans le forum Access
    Réponses: 4
    Dernier message: 20/04/2006, 13h53
  3. Mise à jour table liée à à sous formulaire
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 15/04/2006, 16h26
  4. Relation et mise à jour table
    Par Zbbfrom39 dans le forum Access
    Réponses: 2
    Dernier message: 04/11/2005, 07h22
  5. [TQuery][DBGRID] pb de mise à jour: table en lecture seule
    Par Chrystèle Carré dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/11/2003, 09h36

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