Se connecter avec
S'enregistrer | Connectez-vous

PHP/SQL :: echanger les données de deux colonnes.

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

J'ai bien peur que non... ça existe en php dans pour travailler dans un tableau, mais sur SQL...

peut-être qu'une requete du genre: "UPDATE T SET a1=a2, a2=a1" pourrais fonctionner, mais tout dépend de comment mysql va réagir...
s'il stocke les données avant de faire l'update, ça peut marcher, s'il traite les SET à la volée tu te retrouve avec la valeur initiale de a2 dans les deux colonnes...

Pas à ma connaissance. Mais, une fonction comme celle qui suit a des chances de marcher, je pense.

  1. <?php
  2. $sql = "SELECT id FROM T";
  3. $req = mysql_query($sql);
  4. $nbRows = mysql_num_rows($req);
  5.  
  6. for( $i = 1 ; $i <= $nbRows ; $i++ )
  7. {
  8. $sql = "SELECT A1, A2 FROM T WHERE id = ".$i;
  9. $req = mysql_query($sql);
  10. $data = mysql_fetch_array($req);
  11.  
  12. $tmp = $data[0];
  13. $data[0] = $data[1];
  14. $data[1] = $tmp;
  15.  
  16. $sql = "UPDATE T SET A1 = ".$data[0].", A2 = ".$data[1]." WHERE id = ".$i;
  17. $req = mysql_query($sql);
  18. }
  19. ?>


Voilà. Je pense que ça devrait marcher, à une ou deux erreurs près ! :-)
Expert Programmation

très optimisable, je le donne pour info:
  1. <?
  2. $sql = "SELECT id, A1, A2 FROM T";
  3. $req = mysql_query($sql);
  4. while (list($id,$a1,$a2) = mysql_fetch_row($req)) {
  5. $update = mysql_query("UPDATE T set A1='$a2', A2='$a1' WHERE id=$id");
  6. }
  7. ?>


Autre info: au lieu de faire un mysql_num_rows et stocker dans une variable, utilise le count():
  1. for ($i=0;$i<count($data); $i++)

Et dernier détail: un tableau part de l'indice 0, pas 1 :) 

Oui. Pour le tableau, c'est parce que j'ai bien édité 4 fois le message. C'est plus joli avec le formatage en couleur de la syntaxe. :-)

Je ne connaissais pas le 'count'. Astuce à retenir !

A présent, penchons-nous sur le début du code ! Histoire de comprendre un peu la 'list'... :-D

Je me suis mal exprimé :) 

C'est effictivement en PHP que je veux mon code ;)  agissant sur base sql ... Je vais essayé ce que vous m'avez donné, merci, je vous tiens au courant !


Edit :: Mes colonnes n'ont pas d'id donné... Ca ne va pas marcher :/ 
Expert Programmation

essaye donc:
  1. <?
  2. $res = mysql_query("SELECT a1, a2 from T");
  3. while (list($a1, $a2) = mysql_fetch_row($res)) {
  4. $upd = mysql_query("UPDATE T set a1='$a2', a2='$a1' WHERE (a1='$a1' AND a2='$a2'");
  5. }
  6. ?>

DANGER[/color]: si tu as des enregistrements qui sont l'inverse d'autres, tu vas les rendre identiques...
Sinon, le plus simple est de rajouter un champ identifiant unique dans ta table.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde