Probleme requete UPDATE

Bonjour,

Je voudrais mettre à jour , tous les colonnes d'une table directement sur phpmyadmin.
cependant il y plus de 5000 articles à mettre à jour.
c'est une table ' pss_product ' , avec son champs 'active' et je voudrais modifier que la valeur du champs 'active' de tous les enregistrements .

j'ai essayé

UPDATE `pss_product` SET `active` VALUES
(1),
(1),
(1),
(1),
(0),
(1),
(1),
(1),
(1),
(1),
(1)
....
(1);


mais cela me renvoi un message d'erreur sur la requete,
merci de votre aide

10 réponses

Résumé de la discussion

Mise à jour en masse du champ 'active' d'une table via phpMyAdmin, pour environ 5000 enregistrements de pss_product sans toucher aux autres colonnes. Des réponses recommandent d’utiliser UPDATE en ciblant uniquement les enregistrements à modifier, par exemple UPDATE pss_product SET active = 1 WHERE active = 0. Les échanges rappellent qu’il n’existe pas de requête miracle pour modifier des milliers de valeurs sans préciser les enregistrements, et que des migrations OSCommerce vers PrestaShop peuvent influencer la méthode. En cas de difficulté, plusieurs suggèrent d’automatiser via une vue ou un script afin d’éviter les saisies répétitives et d’optimiser l’opération.

Bobot (l’IA à votre service)
  1. Bonjour,

    Tu veux y écrire quoi?
    Tu écris en brut dans ta base? Pas de vue/code derrière?
    1. bien je voudrais modifier le numero du champs 'active'
      par de nouvelles valeurs

      UPDATE `pss_product` SET `active` VALUES
      (1),
      (1),
      (1),
      (1),
      (0),
      (1),
      (1),
      (1),
      (1),
      (1),
      (1)
      ....
      (1);
      1. Combien y a-t-il de 0 et combien de 1?
    2. actuellement il n'y a que des 1
      et je voudrais modifier avec les nouvelles valeurs que j'ai recuperé de l'ancien base, il y a plus de 5000 produits,
      je voulais savoir comment proceder car

      UPDATE `pss_product` SET `active` VALUES
      (1),
      (1),
      (1),
      (1),
      (0),
      (1),
      (1),
      (1),
      (1),
      (1),
      (1)
      + les 5000 autres
      (1);

      ne fonctionnent pas
      1. Tu n'as pas compris comment te servir de la fonction update.
        Il ne faut l'utiliser que quand une valeur du champ est à changer. Si tu avais 1 et que tu écris 1 ça ne sert à rien. Il faut que tu fasse ton update uniquement sur les 0 en fonction de l'id.
      2. @Pierre1310oui je sais que çà ne sert à rien,
        mais comme il y a plus de 5000 produits , cela serait trop fastidieux et tres longs de tout mettre à jour,

        y a t il pas ce genre de solution de modifier tous l'ensemble d'un coup meme si certaines ne vont pas changer.?
      3. Si les séquences ne se répètent pas non. C'est pour ça qu'on écrit jamais en dur sur une base, on passe toujours par une vue+ code.
    3. comment je pourrais proceder alors?
      1. Ba je t'ai posé une question au tout début, j'attends toujours ma réponse.
    4. pardon laquelle de question?
      1. Tu écris en brut dans ta base? Pas de vue/code derrière?
    5. ah oui j'ecrit en brut sur la base, c'est une site de vente prestashop que j'ai migrer de oscommerce, et je voulais modifier les valeurs de ce champs 'active'
      1. Donc si tu n'as pas l'intention d'automatiser via un code, tu n'as pas d'autre choix que d'écrire à la main( pas toutes, uniquement celles qui changent d'état), même si je te recommande vivement de passer par du code.
    6. comment faire pour automatiser?
      1. "automatiser requete sql" sur google.

        Si ton site est important, il te faudra par exemple faire un html/php, renseigne toi sur ce qu'il ta faut.
    7. çà m'avance pas plus
      je ne saurais tjs pas ecrire ma requete sql
      1. Pourquoi tu as besoin de tout changer d'un coup?
        Ne fais pas répondre au sujet, vas dans ajouter un commentaire pour ne pas que ça descende trop.
      2. parce que j'ai rajouté un module sur prestashop, qui m'a modifié tous les états du champs 'active' qui les a passé à '1'.
    8. Modérateur
      Bonjour,

      Je n'ai pas suivi toutes la discussion ... mais ;..

      Si tu veux mettre des "1" PARTOUT ... dans ce cas la requête que tu peux utiliser directement depuis phpmyadmin est :
      UPDATE `pss_product` SET `active` = 1
      


      Si tu veux mettre à jour que certains enregistrements... tu peux utiliser la même requête... mais en ajoutant une clause WHERE
      par exemple (en partant du principe que tu as un champ de type 'id' te permettant d'identifer les lignes de la table à mettre à jour):
      UPDATE `pss_product` SET `active` VALUES 
      WHERE id IN (1,5,6,7,8,9,10) 
      


      Cordialement, 
      Jordane                                                                 
      1. merci de ta reponse,
        mais en fait non j'ai que des '1' dans la nouvelle base,
        et je voudrais mettre à jour certains produits avec des '0' plus de 5000 produits !!
        j'ai pu recuperer de l'ancienne base la liste des 0 et 1 dans l'ordre des id,
        mais autre probleme il ne correspondent pas,
        c'est à dire l'ancienne base démarrait à id=35, à la nouvelle a id=30
        pffff
      2. Modérateur
        @corsichrisBen si l' ID ne correspond pas ... essaye de trouver un autre champ qui pourrait te serveur d'identifiant ... comme .. le nom du produit par exemple.

        Quelle est la structure de ta table ?
        Peux tu, isoler dans ton ancienne table les enresitrements que tu souhaites mettre à 0 ?
      3. oui je peux selectionner les champs égale à 0 dans l'ancienne table,
        mais les id correspondent pas et aucun autre champs ne correspond,
        puis que c'est une migration d'un oscommerce à prestashop
      4. Modérateur
        @corsichrisSi tu n'as aucune correspondance ... (et donc rien pour les identifier....) ... pourquoi cherches tu à mettres les "mêmes" valeurs ??
        Je ne comprend pas !

        A quoi sert cette table ?
        Ne serait-elle pas en relation avec une autre table ?
        Et dans ton ancienne BDD ... ne serait-ce pas la même chose ?
        Et pour finir..... tu ne nous as toujours pas donné la structure de ta table !*

        Par ce que là ... si tu n'as aucune correspondance, ni rien pour faire une correspondance entre cette table et ton ancienne... il te sera IMPOSSIBLE de faire ce que tu souhaites !
        A moins que les enresitrements ne soient classés exactement dans le même ordre... et là ... comme le suggère Pierre, en utilisant un langage comme le PHP par exemple, tu pourras toujours faire une boucle pour mettre à jour les données.
      5. je recherche à mettre les memes valeurs car j'ai rajouté un module sur prestashop qui m'a tout reiniatialiser à '1' , et donc oui les enregistrements sont classés par ordre , et j'ai la liste des 0 et 1 dans l'ordre,

        comment faire cette boucle alors??