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 :

Base de données PHPmyadmin mysql


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Base de données PHPmyadmin mysql
    Bonjour a tous

    j'ai une base de donnée de gestion de stock de pièce de rechange.
    mes tables sont : fournisseur(Num_fourn, libelle_fournisseur), entrée(id_entrée, #reference, #Num_fourn, Num_bl, Quantité, date),
    stock(reference, designation, emplacement, Stock_initial, somme_entrée, somme_sortie, stock_réel)), sortie(id_sortie, #reference, Num_sortie, #Num_Mag, quantité)

    mon soucis se trouve au niveau de la table stock: je veux faire une requete qui va calculer la somme_entrée = somme(Quantité) de la table entrée lorsque la reference.stock = reference.entrée et somme_sortie = somme(quantité) de la table sortie lorsque la reference.stock = reference.entrée et stock_réel = Stock_initial + somme_entrée - somme_sortie

  2. #2
    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 452
    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 452
    Points : 19 399
    Points
    19 399
    Par défaut
    Salut dembele hamed.

    J'ai repris ton exemple en simplifiant ce qui devait l'être.

    J'ai ajouté deux dates, afin de pouvoir paramétrer les vues.
    La seule façon de procéder est de mettre un intervalle de temps dans la table "stock".
    La date de fin correspond à la quantité qui se trouve dans la colonne "initial".
    La date de début sert pour calculer le bon intervalle.

    Au 31 décembre 2022, la colonne "initial" et la colonne "état" sont vides.
    Je vais renseigner la colonne "initial" par le stock jusqu'au "2023-01-10" compris.
    C'est le rôle joué par la view "vue_1".

    Le rôle joué par la view "vue_2" est de constituer le stock au > "2023-01-10"
    Tous les mouvements ont été mis dans la colonne "etat".
    Le rôle joué par la view "vue_3" est de comparer la colonne "etat" avec la colonne "initial" et les nouveaux mouvements
    Quand tout est bon, on peut modifier la table des stocks.

    Voici l'exemple :
    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `fournisseur`
    --------------
     
    --------------
    CREATE TABLE `fournisseur`
    ( `num`  integer unsigned NOT NULL auto_increment primary key,
      `lib`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `fournisseur` (`lib`) values
      ('Fournisseur Un'),('Fournisseur Deux'),('Fournisseur Trois'),('Fournisseur Quatre'),('Fournisseur Cinq')
    --------------
     
    --------------
    select * from `fournisseur`
    --------------
     
    +-----+--------------------+
    | num | lib                |
    +-----+--------------------+
    |   1 | Fournisseur Un     |
    |   2 | Fournisseur Deux   |
    |   3 | Fournisseur Trois  |
    |   4 | Fournisseur Quatre |
    |   5 | Fournisseur Cinq   |
    +-----+--------------------+
    --------------
    DROP TABLE IF EXISTS `stock`
    --------------
     
    --------------
    CREATE TABLE `stock`
    ( `ref`          integer unsigned NOT NULL auto_increment primary key,
      `description`  varchar(255)     NOT NULL,
      `etat`         integer          NOT NULL,
      `initial`      integer              NULL default 0,
      `date_deb`     date                 NULL default NULL,
      `date_fin`     date             NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `stock` (`description`, `etat`,`date_fin`) values
      ('Stock A',0,'2022-12-31'),('Stock B',0,'2022-12-31'),('Stock C',0,'2022-12-31'),('Stock D',0,'2022-12-31'),('Stock E',0,'2022-12-31')
    --------------
     
    --------------
    select * from `stock`
    --------------
     
    +-----+-------------+------+---------+----------+------------+
    | ref | description | etat | initial | date_deb | date_fin   |
    +-----+-------------+------+---------+----------+------------+
    |   1 | Stock A     |    0 |       0 | NULL     | 2022-12-31 |
    |   2 | Stock B     |    0 |       0 | NULL     | 2022-12-31 |
    |   3 | Stock C     |    0 |       0 | NULL     | 2022-12-31 |
    |   4 | Stock D     |    0 |       0 | NULL     | 2022-12-31 |
    |   5 | Stock E     |    0 |       0 | NULL     | 2022-12-31 |
    +-----+-------------+------+---------+----------+------------+
    --------------
    DROP TABLE IF EXISTS `entree`
    --------------
     
    --------------
    CREATE TABLE `entree`
    ( `id`      integer unsigned NOT NULL auto_increment primary key,
      `ref_fk`  integer unsigned NOT NULL,
      `num_fk`  integer unsigned NOT NULL,
      `qte`     integer          NOT NULL,
      `date`    date             NOT NULL,
      CONSTRAINT `FK_01` FOREIGN KEY (`ref_fk`) REFERENCES `stock`       (`ref`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_02` FOREIGN KEY (`num_fk`) REFERENCES `fournisseur` (`num`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `ajouter`
    --------------
     
    --------------
    CREATE TRIGGER `ajouter`
    BEFORE INSERT ON `entree`
    FOR EACH ROW
    BEGIN
      update `stock` set `etat` = `etat` + NEW.qte where `ref` = NEW.`ref_fk`;
    END
    --------------
     
    --------------
    INSERT INTO `entree` (`ref_fk`,`num_fk`,`qte`,`date`) values
      (1,2, 25,'2023-01-01'),(2,3, 50,'2023-01-02'),(3,4, 50,'2023-01-03'),(4,5, 10,'2023-01-04'),(5,1, 40,'2023-01-05'),
      (1,3, 10,'2023-01-06'),(2,4, 10,'2023-01-07'),(3,5, 10,'2023-01-08'),(4,1, 40,'2023-01-09'),(5,2, 40,'2023-01-10'),
      (1,4, 30,'2023-01-11'),(2,5, 10,'2023-01-12'),(3,1, 20,'2023-01-13'),(4,2, 15,'2023-01-14'),(5,3, 30,'2023-01-15')
    --------------
     
    --------------
    select * from `entree`
    --------------
     
    +----+--------+--------+-----+------------+
    | id | ref_fk | num_fk | qte | date       |
    +----+--------+--------+-----+------------+
    |  1 |      1 |      2 |  25 | 2023-01-01 |
    |  2 |      2 |      3 |  50 | 2023-01-02 |
    |  3 |      3 |      4 |  50 | 2023-01-03 |
    |  4 |      4 |      5 |  10 | 2023-01-04 |
    |  5 |      5 |      1 |  40 | 2023-01-05 |
    |  6 |      1 |      3 |  10 | 2023-01-06 |
    |  7 |      2 |      4 |  10 | 2023-01-07 |
    |  8 |      3 |      5 |  10 | 2023-01-08 |
    |  9 |      4 |      1 |  40 | 2023-01-09 |
    | 10 |      5 |      2 |  40 | 2023-01-10 |
    | 11 |      1 |      4 |  30 | 2023-01-11 |
    | 12 |      2 |      5 |  10 | 2023-01-12 |
    | 13 |      3 |      1 |  20 | 2023-01-13 |
    | 14 |      4 |      2 |  15 | 2023-01-14 |
    | 15 |      5 |      3 |  30 | 2023-01-15 |
    +----+--------+--------+-----+------------+
    --------------
    DROP TABLE IF EXISTS `sortie`
    --------------
     
    --------------
    CREATE TABLE `sortie`
    ( `id`      integer unsigned NOT NULL auto_increment primary key,
      `ref_fk`  integer unsigned NOT NULL,
      `qte`     integer          NOT NULL,
      `date`    date             NOT NULL,
      CONSTRAINT `FK_03` FOREIGN KEY (`ref_fk`) REFERENCES `stock`       (`ref`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `retrancher`
    --------------
     
    --------------
    CREATE TRIGGER `retrancher`
    BEFORE INSERT ON `sortie`
    FOR EACH ROW
    BEGIN
      update `stock` set `etat` = `etat` - NEW.qte where `ref` = NEW.`ref_fk`;
    END
    --------------
     
    --------------
    INSERT INTO `sortie` (`ref_fk`,`qte`,`date`) values
      (1, 05,'2023-01-06'),(2, 10,'2023-01-09'),(3, 20,'2023-01-10'),(4, 10,'2023-01-12'),(5, 40,'2023-01-15')
    --------------
     
    --------------
    select * from `sortie`
    --------------
     
    +----+--------+-----+------------+
    | id | ref_fk | qte | date       |
    +----+--------+-----+------------+
    |  1 |      1 |   5 | 2023-01-06 |
    |  2 |      2 |  10 | 2023-01-09 |
    |  3 |      3 |  20 | 2023-01-10 |
    |  4 |      4 |  10 | 2023-01-12 |
    |  5 |      5 |  40 | 2023-01-15 |
    +----+--------+-----+------------+
    --------------
    select * from `stock`
    --------------
     
    +-----+-------------+------+---------+----------+------------+
    | ref | description | etat | initial | date_deb | date_fin   |
    +-----+-------------+------+---------+----------+------------+
    |   1 | Stock A     |   60 |       0 | NULL     | 2022-12-31 |
    |   2 | Stock B     |   60 |       0 | NULL     | 2022-12-31 |
    |   3 | Stock C     |   60 |       0 | NULL     | 2022-12-31 |
    |   4 | Stock D     |   55 |       0 | NULL     | 2022-12-31 |
    |   5 | Stock E     |   70 |       0 | NULL     | 2022-12-31 |
    +-----+-------------+------+---------+----------+------------+
    --------------
    update `stock` set `date_deb` = `date_fin`, `date_fin` = '2023-01-10'
    --------------
     
    --------------
    drop view if exists `vue_1`
    --------------
     
    --------------
    create view `vue_1` as
      select ref_fk,
             max(`entree_qte`) as entree_qte,
             max(`sortie_qte`) as sortie_qte
        from (      select t1.`ref_fk`,
                           sum(t1.`qte`) as entree_qte,
                           0             as sortie_qte
                      from `entree` as t1
                inner join `stock`  as t2
                        on t2.`ref` = t1.`ref_fk`
                     where t1.`date` >  t2.`date_deb`
                       and t1.`date` <= t2.`date_fin`
                  group by t1.`ref_fk`
     
                     union
     
                    select t1.`ref_fk`,
                           0             as entree_qte,
                           sum(t1.`qte`) as sortie_qte
                      from `sortie` as t1
                inner join `stock`  as t2
                        on t2.`ref` = t1.`ref_fk`
                     where t1.`date` >  t2.`date_deb`
                       and t1.`date` <= t2.`date_fin`
                  group by t1.`ref_fk`
             ) as x
    group by ref_fk
    --------------
     
    --------------
    select * from `vue_1`
    --------------
     
    +--------+------------+------------+
    | ref_fk | entree_qte | sortie_qte |
    +--------+------------+------------+
    |      1 |         35 |          5 |
    |      2 |         60 |         10 |
    |      3 |         60 |         20 |
    |      4 |         50 |          0 |
    |      5 |         80 |          0 |
    +--------+------------+------------+
    --------------
    update     `stock`  as t1
    inner join `vue_1`  as t2
           set t1.`initial` = t2.`entree_qte` - t2.`sortie_qte`
         where t1.`ref` = t2.`ref_fk`
    --------------
     
    --------------
    select * from `stock`
    --------------
     
    +-----+-------------+------+---------+------------+------------+
    | ref | description | etat | initial | date_deb   | date_fin   |
    +-----+-------------+------+---------+------------+------------+
    |   1 | Stock A     |   60 |      30 | 2022-12-31 | 2023-01-10 |
    |   2 | Stock B     |   60 |      50 | 2022-12-31 | 2023-01-10 |
    |   3 | Stock C     |   60 |      40 | 2022-12-31 | 2023-01-10 |
    |   4 | Stock D     |   55 |      50 | 2022-12-31 | 2023-01-10 |
    |   5 | Stock E     |   70 |      80 | 2022-12-31 | 2023-01-10 |
    +-----+-------------+------+---------+------------+------------+
    --------------
    drop view if exists `vue_2`
    --------------
     
    --------------
    create view `vue_2` as
      select ref_fk,
             max(`entree_qte`) as entree_qte,
             max(`sortie_qte`) as sortie_qte
        from (      select t1.`ref_fk`,
                           sum(t1.`qte`) as entree_qte,
                           0             as sortie_qte
                      from `entree` as t1
                inner join `stock`  as t2
                        on t2.`ref` = t1.`ref_fk`
                     where t1.`date` >  t2.`date_fin`
                  group by t1.`ref_fk`
     
                     union
     
                    select t1.`ref_fk`,
                           0             as entree_qte,
                           sum(t1.`qte`) as sortie_qte
                      from `sortie` as t1
                inner join `stock`  as t2
                        on t2.`ref` = t1.`ref_fk`
                     where t1.`date` >  t2.`date_fin`
                  group by t1.`ref_fk`
             ) as x
    group by ref_fk
    --------------
     
    --------------
    select * from `vue_2`
    --------------
     
    +--------+------------+------------+
    | ref_fk | entree_qte | sortie_qte |
    +--------+------------+------------+
    |      1 |         30 |          0 |
    |      2 |         10 |          0 |
    |      3 |         20 |          0 |
    |      4 |         15 |         10 |
    |      5 |         30 |         40 |
    +--------+------------+------------+
    --------------
    drop view if exists `vue_5`
    --------------
     
    --------------
    create view `vue_3` as
        select t1.`description`,
               t1.`initial`,
               t1.`date_deb`,
               t1.`date_fin`,
               t2.entree_qte,
               t2.sortie_qte,
               t1.`initial` + t2.entree_qte - t2.sortie_qte as reel_qte,
               t1.`etat`,
               t1.`initial` + t2.entree_qte - t2.sortie_qte - t1.`etat` as 'difference'
     
          from `stock` as t1
     
    inner join `vue_2` as t2
            on t2.`ref_fk` = t1.`ref`
    --------------
     
    --------------
    select * from `vue_3`
    --------------
     
    +-------------+---------+------------+------------+------------+------------+----------+------+------------+
    | description | initial | date_deb   | date_fin   | entree_qte | sortie_qte | reel_qte | etat | difference |
    +-------------+---------+------------+------------+------------+------------+----------+------+------------+
    | Stock A     |      30 | 2022-12-31 | 2023-01-10 |         30 |          0 |       60 |   60 |          0 |
    | Stock B     |      50 | 2022-12-31 | 2023-01-10 |         10 |          0 |       60 |   60 |          0 |
    | Stock C     |      40 | 2022-12-31 | 2023-01-10 |         20 |          0 |       60 |   60 |          0 |
    | Stock D     |      50 | 2022-12-31 | 2023-01-10 |         15 |         10 |       55 |   55 |          0 |
    | Stock E     |      80 | 2022-12-31 | 2023-01-10 |         30 |         40 |       70 |   70 |          0 |
    +-------------+---------+------------+------------+------------+------------+----------+------+------------+
    --------------
    update     `stock`  as t1
    inner join `vue_2`  as t2
           set t1.`initial` = t1.`initial` + t2.`entree_qte` - t2.`sortie_qte`, t1.`etat` = 0
         where t1.`ref` = t2.`ref_fk`
    --------------
     
    --------------
    select * from `stock`
    --------------
     
    +-----+-------------+------+---------+------------+------------+
    | ref | description | etat | initial | date_deb   | date_fin   |
    +-----+-------------+------+---------+------------+------------+
    |   1 | Stock A     |    0 |      60 | 2022-12-31 | 2023-01-10 |
    |   2 | Stock B     |    0 |      60 | 2022-12-31 | 2023-01-10 |
    |   3 | Stock C     |    0 |      60 | 2022-12-31 | 2023-01-10 |
    |   4 | Stock D     |    0 |      55 | 2022-12-31 | 2023-01-10 |
    |   5 | Stock E     |    0 |      70 | 2022-12-31 | 2023-01-10 |
    +-----+-------------+------+---------+------------+------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Cordialement.
    Artemus24.
    @+

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Un stock, c'est une quantité à la date d'inventaire augmentée de la somme des entrées et diminuée de la somme des sorties depuis cette date
    Ce faisant, la table "STOCK" devrait avoir une colonne date permettant de connaitre cette date d'inventaire.

    Ensuite, je ne vois pas l'intérêt d'avoir deux tables, l'une pour les entrées, l'autre pour les sorties...
    Dans les deux cas, entrée comme sortie concernent un article, pour une certaine quantité et un certain emplacement d'un certain magasin. Seul le signe de la quantité change : positif pour une entrée et négatif pour une sortie.

    Enfin, la présence à la fois du bordereau de livraison et du fournisseur dans les tables "entrées" et "sorties" est suspecte. Un bordereau de livraison c'est un et un seul fournisseur (contrairement à un bon de transport qui peut concerner plusieurs bordereaux de livraison). Du coup, la présence du bordereau de livraison seul est suffisante.

    Pour en revenir à la question initiale, il ne faut pas stocker une donnée calculée, c'est un risque d'erreur, le stock à l'instant "t" doit être calculé par requête (éventuellement au travers d'une vue comme le propose Artemus24).

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut insertion de la date sur toute les lignes de ma table
    merci à ARTEMUS24 pour le code
    mais j'ai un soucis au niveau des dates
    j'ai importé ma table stock avec toutes les references maintenant je veux attribuer à chaque ligne de la table stock la date du 2022-12-31
    ça affiche erreur Champ '2022-12-31' inconnu dans field list

    voici le code : UPDATE `stock` SET `date_fin` = `2022-12-31`;

  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 452
    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 452
    Points : 19 399
    Points
    19 399
    Par défaut
    Salut dembele hamed.

    Le nom d'une colonne ou le nom d'une table, quand il s'agit d'un mot réservé se met entre apostrophes inversées ` (ALT GR + 7).
    Mais une chaîne de caractères comme la date se met entre apostrophes ' (touche 4).
    Donc ne confondez pas ces deux types d'apostrophes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `stock` SET `date_fin` = '2022-12-31';
    Cordialement.
    Artemus24.
    @+

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    merci ARTEMUS24

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    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
    DROP TRIGGER IF EXISTS `retrancher`
    --------------
     
    --------------
    CREATE TRIGGER `retrancher`
    BEFORE INSERT ON `sortie`
    FOR EACH ROW
    BEGIN
      update `stock` set `etat` = `etat` - NEW.qte where `ref` = NEW.`ref_fk`;
    END
     
    DROP TRIGGER IF EXISTS `ajouter`
    --------------
     
    --------------
    CREATE TRIGGER `ajouter`
    BEFORE INSERT ON `entree`
    FOR EACH ROW
    BEGIN
      update `stock` set `etat` = `etat` - NEW.qte where `ref` = NEW.`ref_fk`;
    END
    merci Artemus24 le code est parfait mais en cas de modification sur un enregistrement de la table entree ou sortie le colonne etat de stock n'est pas modifier
    donc j'ai essayé de creer un trigger pour la modification mais il n'y a pas d'effet.

  8. #8
    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 452
    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 452
    Points : 19 399
    Points
    19 399
    Par défaut
    Salut dembele hamed.

    Citation Envoyé par dembele hamed
    en cas de modification sur un enregistrement de la table entree ou sortie le colonne etat de stock n'est pas modifier
    C'est normal car je n'ai traité que le cas de l'insertion. Le déclencheur est le même, à deux details prêt.
    Voici le cas de la mise à jour avec un retrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- =================
    -- Trigger `maj_sub`
    -- =================
    
    DROP TRIGGER IF EXISTS `maj_sub`;
    
    DELIMITER $$
    CREATE TRIGGER `maj`
    BEFORE UPDATE ON `sortie`
    FOR EACH ROW
    BEGIN
      update `stock` set `etat` = `etat` + OLD.qte - NEW.qte where `ref` = OLD.`ref_fk`;
    END$$
    DELIMITER ;
    Une mise à jour consiste à remplacer l'ancienne valeur (OLD) par la nouvelle (NEW).
    Comme l'ancienne valeur a déjà été retranchée, tu dois à nouveau l'ajouter, puis retrancher la nouvelle.

    Dans le cas de "maj_add", c'est l'inverse.
    Comme l'ancienne valeur a déjà été ajoutée, tu dois à nouveau la retrancher, puis ajouter la nouvelle.

    En espérant que je ne me suis pas trompé car je ne l'ai pas testé.

    Bonne continuation.

    Cordialement.
    Artemus24
    @+

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    merci ARTEMUS24 le code marche j'ai créé aussi un trigger pour la mise a jour des entrées et ça marche correctement
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DROP TRIGGER IF EXISTS `update`;
     
    CREATE TRIGGER `update`
    BEFORE UPDATE ON `entree`
    FOR EACH ROW 
    	UPDATE `stock` SET `etat` = `etat`- OLD.Quantite + New.Quantite WHERE `reference` = OLD.`ref_fk` ;

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    bonsoir

    merci pour le code de mise à jour des sorties sur la colonne etat
    maintenant quand je mets à jour etat dans les normes initial doit être aussi à jour mais le souci est que initial ne change
    donc j'ai essayé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DROP TRIGGER IF EXISTS `update_initial`;
     
    CREATE TRIGGER `update_initial`
    BEFORE UPDATE ON `stock`
    FOR EACH ROW
     UPDATE `stock` AS t1
    	 INNER JOIN `vue_1` AS t2
    SET t1.`initial` = t1.`initial` + New.t2.`entree_qte` - OLD.t2.`entree_qte` + OLD.t2.`sortie_qte` - New.t2.`sortie_qte` 
    WHERE t1.`reference` = t2.`ref_fk` ;
    mais ça affiche erreur

  11. #11
    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 452
    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 452
    Points : 19 399
    Points
    19 399
    Par défaut
    Salut dembele hamed.

    La syntaxe n'est pas bonne.

    Il y a plusieurs points qui ne vont pas dans ce que tu cherches à faire.

    1) tu ne peux pas faire référence, dans un déclencheur (trigger), à la même table comme tu le fais.
    Par contre, tu peux venir mettre à jour d'autres tables que celle-ci.
    Par exemple, laisser une trace de ce que tu fais, en insérant une ligne dans la table des historiques.

    2) il ne faut pas confondre mouvement et état comme tu le fais.

    Un mouvement est lié à une date de valeur et cette ligne doit être stockée dans une table.
    En principe, on n'enregistre pas l'état des stocks, mais on le recalcule.

    Comme tu désires enregistrer 'l'état de tes stocks aussi bien pour l'année précédente que pour l'année courante, il faut le faire selon un critère.

    La colonne "initiale" concerne l'état de tes stocks de l'année précédente.
    Tu dois le faire au travers d'un script où tu vas renseigner la date d'arrêtée qui sera mise au "2022-12-31" comprise.
    Toutes les mouvements sélectionnées se feront selon ce critère : date de valeur <= date d'arrêtée.

    La colonne "etat" concerne l'état de tes stocks de l'année courante.
    Tu le fais au fil de l'eau où le critère est le suivant : date d'arrêtée < date de valeur.
    Ou si tu ne désires pas gérer la date d'arrêtée, tu devras prendre uniquement les mouvements dont la date de valeur contient l'année courante.

    Dans les deux cas, c'est le même traitement.
    Sauf que dans un cas, tu le fais à la demande tandis que dans l'autre, au fil de l'eau.
    Et tu n'as pas le même critère pour sélectionner tes mouvements.

    J'espère que tu as compris que tes deux colonnes "initiale" et "etat" ne se gère pas de la même façon.

    3) pour répondre à ta question, tu ne dois pas utiliser un déclencheur pour alimenter ta colonne "initiale" mais faire un script où tu pourras exploiter la view. Sinon, tu peux créer une procédure stockée.

    Cordialement.
    Artemus24.
    @+

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2020
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonsoir a tous
    ARTEMUS24 merci pour tes éclaircissements

Discussions similaires

  1. Connection Base de donnée distante MySQL
    Par ben_ghost dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 06/09/2006, 12h06
  2. Réponses: 1
    Dernier message: 30/07/2006, 20h02
  3. Réponses: 9
    Dernier message: 06/07/2006, 18h41
  4. Choix base de donnée et MYSQL
    Par masseur dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/06/2006, 16h22
  5. connexion a une base de donnée distante mysql(site internet)
    Par rollernox dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/07/2004, 13h14

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