Votre question

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

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
14 Juin 2006 20:50:03

Voilà, je m'explique ;

Sur la table T, j'ai une colonne a1, et une colonne a2. La colonne a1 contient la donnée X et la colonne a2 contient la donner Y.

Existe-t-il une fonction prédéfinie pour que a1 se retrouve avec Y et a2 avec X ?


Merci d'avance ! ;) 

Autres pages sur : php sql echanger donnees colonnes

a c 145 L Programmation
14 Juin 2006 21:02:03

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...
14 Juin 2006 21:03:22

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 ! :-)
Contenus similaires
a c 145 L Programmation
14 Juin 2006 21:09:14

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 :) 
14 Juin 2006 21:14:35

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
14 Juin 2006 23:00:50

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 :/ 
a c 145 L Programmation
14 Juin 2006 23:45:52

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.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS