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 :

Utilisation de la requête sql UPDATE


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Utilisation de la requête sql UPDATE
    Bonjour , voilà j'ai une table qui contient des champs et je veux faire UPDATE de quelques champs avec des opérations.

    Seulement quand je fais l'UPDATE avec une seule colonne ca marche mais quand j'ajoute d'autres colonnes ca ne marche pas. Voici le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $link= mysqli_connect("localhost","root","","mydb");
    $compute = "UPDATE donnees SET
                a = a1 + a2,
            b = b1 + b2,
            c= a/b ";
    $result=mysqli_query($link, $compute);
        if($result==true)echo 'Success compute'.'<br>';
        else echo 'Failure compute'.'<br>';
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par nabil-karim Voir le message
    quand je fais l'UPDATE avec une seule colonne ca marche mais quand j'ajoute d'autres colonnes ca ne marche pas.
    Que signifie "ça ne marche pas" ?
    Il y a un message d'erreur ? Lequel ?
    Le résultat n'est pas celui attendu ? Quel était le résultat attendu? Quel est le résultat obtenu ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    En fait les valeurs des colonnes contenait que des 0. quand je fais l'UPDATE sur les colonnes multiples, ca fait le ''mysqli_error" . J'ai réglé le problème comme j'ai pu en faisant l'update des colonnes une à une .pas très pratique oui , mais pour le moment c'est ce que j'ai pu faire.
    par contre j'ai eu un autre problème, probleme , il ne fait pas les calculs pour un champ et laisse les valeurs à zéro
    help plzz

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    En cas d'erreur de syntaxe ou d'exécution d'une requête, MySQL retourne un message d'erreur donnant quelques informations sur l'origine de l'erreur.
    Ce message serait utile pour corriger ce qui peut l'être.
    Par ailleurs, sans exemple détaillé, il est difficile de comprendre ce qui se passe et ce qui aurait du arriver.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Je ferai la même remarque que Al1_24, sans plus d'explication, il nous est impossible de répondre à votre attente.
    J'ai repris votre update, et je ne rencontre aucun problème sur mon exemple basique.
    Si vous désirez obtenir une réponse plus adapté à votre problème, il nous faut :
    --> le descriptif de vos tables,
    --> un jeu d'essai,
    --> la requête posant problème,
    --> le résultat attendu.

    Voici un exemple de votre problème :
    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
    --------------
    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,
      `a1`   decimal(5, 2)   NOT NULL,
      `a2`   decimal(5, 2)   NOT NULL,
      `b1`   decimal(5, 2)   NOT NULL,
      `b2`   decimal(5, 2)   NOT NULL,
      `a`    decimal(5, 2),
      `b`    decimal(5, 2),
      `c`    decimal(5, 2)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`a1`,`a2`,`b1`,`b2`,`a`,`b`,`c`) values
      (25, 17, 39, 61, null, null, null),
      (11, 22, 17, 33, null, null, null)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------+-------+-------+-------+------+------+------+
    | id | a1    | a2    | b1    | b2    | a    | b    | c    |
    +----+-------+-------+-------+-------+------+------+------+
    |  1 | 25.00 | 17.00 | 39.00 | 61.00 | NULL | NULL | NULL |
    |  2 | 11.00 | 22.00 | 17.00 | 33.00 | NULL | NULL | NULL |
    +----+-------+-------+-------+-------+------+------+------+
    --------------
    update `test` set a = a1 + a2,
                      b = b1 + b2,
                      c = a / b
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------+-------+-------+-------+-------+--------+------+
    | id | a1    | a2    | b1    | b2    | a     | b      | c    |
    +----+-------+-------+-------+-------+-------+--------+------+
    |  1 | 25.00 | 17.00 | 39.00 | 61.00 | 42.00 | 100.00 | 0.42 |
    |  2 | 11.00 | 22.00 | 17.00 | 33.00 | 33.00 |  50.00 | 0.66 |
    +----+-------+-------+-------+-------+-------+--------+------+
    --------------
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merci, j'ai pu voir mon erreur
    en fait j'avais mal ecrit les noms des champs dans la table que j'ai créée, et dans la requete j'ai écrit un autre nom, et ca ne marchait .
    j'ai corrigé les noms et ca marche (avec ma solution peu commode d'insertion des update set une à une c'est à dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update `test` set a = a1 + a2,
    update `test` setb = b1 + b2,
    update `test` set c = a / b

    peut etre que c'est la version de mysql car j'essai de faire d'autres opérations avec php/mysqlqui ne marchent pas comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        $host = 'localhost';
        $username = 'root';
        $password = '';
        $dbname = 'mydb';
        $link= mysqli_connect($host,$username,$password,$dbname);
    mysqli_query($link, " if exists 
    			(select * from INFORMATION_SCHEMA.COLUMNS
    			 WHERE TABLE_NAME='delete' AND COLUMN_NAME='prenom' )
    			 ALTER TABLE delete DROP COLUMN prenom")or die('Failure delete add_column' . mysql_error());
    :

    merci de me dire si j'ai bien écris la syntaxe avec comme base de données mydb, et comme table delete (je veux supprimer un champ si il existe)
    merci à vous

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut nabil-karim.

    L'idée est bonne mais vous vous y prenez mal !

    Voici ce que je propose :
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    --------------
    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,
      `a_supprimer`   decimal(5, 2)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`a_supprimer`) values
      (25.0),(50.0),(75.0)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------------+
    | id | a_supprimer |
    +----+-------------+
    |  1 |       25.00 |
    |  2 |       50.00 |
    |  3 |       75.00 |
    +----+-------------+
    --------------
    commit
    --------------
     
    --------------
    DROP PROCEDURE IF EXISTS `erase`
    --------------
     
    --------------
    CREATE PROCEDURE `erase`
    (
            IN In_base   varchar(255),
            IN In_table  varchar(255),
            IN In_column varchar(255)
    )
    DETERMINISTIC
    NO SQL
    BEGIN
      DECLARE _line VARCHAR(255);
     
      if exists (select  1
                   from  information_schema.columns
                  where  table_schema = In_base
                    and  table_name   = In_table
                    and  column_name  = In_column) then
        set _line = concat('alter table `', In_table, '` drop column `', In_column, '`;');
        set @line = _line;
     
        PREPARE            stmt FROM @line;
        EXECUTE            stmt;
        DEALLOCATE PREPARE stmt;
      end if;
    END
    --------------
     
    --------------
    call `erase` ('base', 'test', 'a_supprimer')
    --------------
     
    --------------
    call `erase` ('base', 'test', 'a_supprimer')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    +----+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Pour ce faire, j'ai créé une procédure stocké qui réalise exactement ce que vous essayez de faire.

    Il suffit d'appeler la procédure par un CALL en passant les trois paramètres qui sont le nom de la base, le nom de la table et le nom de la colonne.
    Volontairement, j'ai appelé deux fois la procédure et l'on constate qu'il n'y a aucun message d'anomalie.
    On peut mettre un message d'anomalie si vous le désirez.
    Et au final, la colonne a bien été supprimée.

    A tout hasard, je vous communique le source de mon script.
    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
    91
    92
    93
    94
    95
    96
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    use `base`;
     
    -- =====================
    -- Création table `test`
    -- =====================
     
    drop table if exists `test`;
     
    CREATE TABLE `test`
    ( `id`            integer unsigned  NOT NULL auto_increment primary key,
      `a_supprimer`   decimal(5, 2)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =====================
    -- Insertion dans `test`
    -- =====================
     
    insert into `test` (`a_supprimer`) values
      (25.0),(50.0),(75.0);
     
    -- ================
    -- Vidage de `test`
    -- ================
     
    select * from `test`;
     
    commit;
     
    -- =================
    -- Procédure Stockée
    -- =================
     
    DROP PROCEDURE IF EXISTS `erase`;
     
    DELIMITER $$
    CREATE PROCEDURE `erase`
    (
    	IN In_base   varchar(255),
    	IN In_table  varchar(255),
    	IN In_column varchar(255)
    )
    DETERMINISTIC
    NO SQL
    BEGIN
      DECLARE _line VARCHAR(255);
     
      if exists (select  1
                   from  information_schema.columns
                  where  table_schema = In_base
                    and  table_name   = In_table
                    and  column_name  = In_column) then
        set _line = concat('alter table `', In_table, '` drop column `', In_column, '`;');
        set @line = _line;
     
        PREPARE            stmt FROM @line;
        EXECUTE            stmt;
        DEALLOCATE PREPARE stmt;
      end if;
    END$$
    DELIMITER ;
     
    -- ============
    -- Requête N° 1
    -- ============
     
    call `erase` ('base', 'test', 'a_supprimer');
    call `erase` ('base', 'test', 'a_supprimer');
     
    -- ================
    -- Vidage de `test`
    -- ================
     
    select * from `test`;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    exit
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup pour votre aide
    Cependant j'utilise php pour mes requêtes php et je voudrais savoir comment je peux insérer cela dans php, je l'ai fait comme dans l'exemple que j'ai posté , mais ça ne marche pas .
    Pouvez vous m'orienter sur la suppression de colonnes si elles existent dans une requête SQL insérée dans php ?

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut nabil-karim.

    La procédure stockée se met dans votre base de données, de la même façon que vous le faites pour vos tables, trigger, view ...
    Tout ce que vous devez mettre dans votre php, c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $compute = "call `erase` ('base', 'test', 'a_supprimer');";
    $result=mysqli_query($link, $compute);
        if($result==true)echo 'Success compute'.'<br>';
        else echo 'Failure compute'.'<br>';
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merciiiiiiiiiiiii
    mon code marche bien maintenant,
    grand merci pour ton aide, c'est vraiment sympa

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

Discussions similaires

  1. Requête SQL UPDATE dans VBA
    Par Pingouin22 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2022, 10h37
  2. Requête SQL 'UPDATE' en Java
    Par Grulf dans le forum JDBC
    Réponses: 5
    Dernier message: 11/06/2008, 09h32
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04
  5. Access - Requête SQL - UPDATE
    Par tchoo83 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/12/2005, 15h48

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