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

MySQL Discussion :

Update sur toute une table


Sujet :

MySQL

  1. #1
    FoxLeRenard
    Invité(e)
    Par défaut Update sur toute une table
    Bonjour,
    ça parait bête, mais je ne connais pas la syntaxe la plus simple pour faire une mise a jour tel que je vais vous l'expliquer :

    1) J'ais une table "matable"
    2) dedans se trouve une valeur ordinaire, je veux dire ni unique ni une clé
    son nom est "Article" qui est un nombre celui que je veux changer
    3) j'ais un array "tranpose" dans chaque rang de cet array corespond le
    nouveau numéro que devrait avoir ma valeur "Article"

    Tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Article=$transpose[$Article]
    Voila , comment feriez vous la boucle de lecture et mise a jour de ma "matable"

    Mille mercis d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Plutôt qu'un array en PHP, il faut que tu fasses une table (au besoin temporaire) en MySQL.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Plutôt qu'un array en PHP, il faut que tu fasses une table (au besoin temporaire) en MySQL.
    Merci, ma table est faite et fait 50 lignes
    En fait j'ais essayé ça mais j'ais une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     $Flag1=mysql_connect($Serveur,$User,$Mdp);
     $Flag2=mysql_select_db($MaBase);
     $result=mysql_query( "UPDATE fomes  SET
     
      MsgFoNum='$LesX[MsgFoNum]'
     
      WHERE MsgIndex>0 and MsgIndex<9999");
      mysql_close();

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    OK, maintenant donne-moi le code de création de tes tables et la transposition à effectuer.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Antoun Voir le message
    OK, maintenant donne-moi le code de création de tes tables et la transposition à effectuer.
    Tu dois parler de truc trop forts pour moi, simplement ma table fomes

    je veux la lire en entier, et a chaque data lus, un par un, je vais prendre dedans la valeur actuelle de MsgFoNum et la remplacée par le contenu de $LesX[MsgFoNum]

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    je voulais juste connaître les noms de tes deux tables et des colonnes, mais tant pis, je vais inventer.

    Si j'imagine donc que tu veux modifier la colonne Article de la table Ma_table, en utilisant la table Recodage avec les colonne Ancien_Num et Nouvo_Num, cela donne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update ma_table T 
      inner join recodage R on T.article = R.ancien_num
    set T.article = R.nouvo_num ;

    Cette requête met à jour TOUTE la table en une seule fois, et ne doit PAS être mise dans une boucle.

    Les modifications étant irréversibles, il est fortement recommandé de faire une copie de ta table avant de tester.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Tu es trés gentil, et je te remercies de ta réponse, mais j'insistes, relis ma question clairement formulée, je n'ais qu'une table et un ARAY !

    C' est pas génant jespéres !!!

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    La solution qu'il te propose c'est de creer une table temporaire
    recodage et d'y inserer ton tableaux avec un truc du style :

    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
     
     
    // Creer la table recodage (ancien_num, nouvo_num)
     
    // Inserer le contenu de $transpose dedans
     
    foreach ($transpose as $ancien_num => $nouvo_num)
    {
        $query = "INSERT INTO recodage (ancien_num, nouvo_num)
                                 VALUES ( ".$ancien_num.",".$nouvo_num." ) ;
                       ";
     
        //Code pour executer la query
    } 
     
    // Utilise la query de Antoun
     
    //  Detruire la table recodage

    Voila je pense que c'est +- ce qu'il faut faudrait faire.

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Je comprends bien,
    mais je suis trés étonné et "gourmand de savoir"
    Mysql ne peut mettre a jour une valeur a l'aide d'un ARAY ???

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Mysql est la base de donnee et fonctionne en SQL.
    A priori MySql ne sait pas ce qu'est un array PHP.
    Il est possible que MySQL aie une forme de compatibilite avancee avec PHP,
    mais ce sont 2 niveaux applicatifs differents qui se communiquent l'un , l'autre
    en SQL.

    PHP a une bibliotheque standard pour communiquer avec MySQL, et a ma connaissance
    il n'y a pas une tel fonction. Neanmoins en regardant la documentation des fonctions
    de mysql sur http://fr.php.net j'ai deja vu des exemples de codes, de gens qui avaient creer des fonctions pour inserer directement un tableau dans une table.

    Il est egalement possible que des Classes/Librairies permettant un niveau d'abstraction par rapport a la base de donnees (Mysql, oracle, postgres, Ingres ...) ou meme par rapport au SQL, permettent d'inserer directement un tableau dans un table sans que tu aies a bouger le petit doigts.

    Par exemple dans CakePHP, on peut lire, ecrire, et modifier des donnees dans la base de donnees sans jamais ecrire une seul ligne de SQL.

    Tu peux toujours generaliser le code de ce probleme-ci afin de pouvoir le re-utiliser plus tard dans d'autres programmes si tu rencontre souvent le besoin de remplir des tables de cette facon.

    Il est aussi possible de remplir une table en une seul fois en SQL avec la commande COPY.
    En tout cas elle existe en POSTGRESQL, il faudrait voir pour MySQL. Evidemment c'est beaucoup plus rapide que de faire 1 insert par ligne du tableau.
    Donc si tu es sur que ton tableau est completement valide a 100%, alors tu peux transferer ton tableau dans une chaine formatee comme il faut, ou dans un fichier. (copier un tableau dans un fichier peut se faire en une ligne en php). ET ensuite charger ce fichier dans une table en une seule commande SQL ( en Postgres je pouvais parametrer le copy en indiquant les separateurs, l'encodage etc).

    Mais alors il n'y a aucune verifications sur l'integrite structurelle et referentielle de ta BD...

  11. #11
    Membre actif
    Homme Profil pro
    PDG
    Inscrit en
    Septembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PDG
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2005
    Messages : 101
    Points : 225
    Points
    225
    Par défaut
    Sauf que là il veut mettre à jour une zone de sa table, pas la remplacer entièrement.

    Bon, d'après ce que j'ai compris ton array comprend autant d'éléments que ta table et se trouve dans le même ordre.
    Avec MySQL, la seule solution simple que je vois, s'il y a un index, est de faire ainsi :
    Disons qu'il y a 50 éléments à mettre à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Tu sélectionne tous les index et les articles correspondants.
    $sql = "SELECT index, Article FROM matable";
    $result = mysql_query($sql);
    // Comme tu connais le nombre d éléments à mettre à jour :
    for ($i = 0; $i < 50; $i++)
    {
        list($index, $article) = mysql_fetch_row($result);
        $sql = "UPDATE matable SET Article=".$LesX[$i]." WHERE index=".$index;
        $updt = mysql_query($sql);
    }
    Il faut bien sûr que l'index soit UNIQUE ou PRIMARY.

  12. #12
    FoxLeRenard
    Invité(e)
    Par défaut
    OK Merci merci,

    j'ais pris bonne note

Discussions similaires

  1. UPDATE sur tout une table
    Par ddaime dans le forum Développement
    Réponses: 5
    Dernier message: 12/06/2011, 09h52
  2. Modification sur toute une table
    Par FoxLeRenard dans le forum Débuter
    Réponses: 3
    Dernier message: 11/12/2008, 20h57
  3. Réponses: 4
    Dernier message: 06/09/2006, 14h04
  4. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44

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