• # Insert, Update, Delete

    Posté par . En réponse au message MySQL : échanger deux valeurs (clé primaire). Évalué à 1.

    Salut, si j'ai bien compris ...
    CREATE TABLE `produit` (
     `id` int(10) unsigned NOT NULL auto_increment,
     `nom` varchar(80) default NULL,
     PRIMARY KEY (`id`)
    ) TYPE=MyISAM;
    
    mysql> select * from produit;
    +----+------+
    | id | nom |
    +----+------+
    | 1 | p1 |
    | 2 | p2 |
    | 3 | p3 |
    +----+------+
    
    Et pour deux produit d'id n et m, tu veux échanger n et m, ce qui revient à laisser n et m à leur place et à échanger toutes les autres valeurs des deux lignes de données. Moi je ferai un truc du genre:
    • - duplication du premier produit
    • - mettre à jour le premier produit avec les valeurs du second
    • - mettre à jour le second avec les données de la copie
    • - suppression de la copie
    en pseudo-sql, ca donnerai ca:
    • - insert into produit(nom) select nom from produit where id=n;
    • - p = select last_insert_id()
    • - update produit p1, produit p2 set p1.nom=p2.nom where p2.id=m and p1.id=n;
    • - update produit p1, produit p2 set p1.nom=p2.nom where p2.id=p and p1.id=m;
    • - delete from produit where id=p;
    Je pense pas qu'on puisse le faire en moins d'opérations ?!? Mais pourquoi vouloir échanger deux id de produits ? En as-tu vraaaaiiiiiiment besoin ? A+, Jay