Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/08/2014, 10:32
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Intercambiar row de mysql con php

Vamos a ver si se entiede la lógica, pero como un pseudocódigo.
Cita:
A = 1
B = 2
Listar A, B = {1, 2}

C = A
A = B
B = C
Listar A, B = {2, 1}
Es un algoritmo de prgramación básica que se enseña en las primeras clases de programación en cualquier lenguaje.
La idea consiste en que si tienes dos variables o registros y necesitas invertir sus valores, necesitas una variable intermedia como depósito.

En el caso de bases de datos, se suplanta la lógica de la variable intermedia con su identificador: Necesitas el ID de origen y el ID de destino. No sirve biuscar el valor, porque el primer UPDATE destruirá esa referencia.

Entonces hay al menos una alternativa:
Código PHP:
Ver original
  1. include_once('conexion.php');
  2. $a = $_POST['na'];
  3. $b = $_POST['nb'];
  4. mysql_query("CREATE TABLE `ordenar_canales` ( id INT, n INT)");
  5. mysql_query("INSERT INTO `ordenar_canales`(`id`, `n`) VALUES ('1','$a')");
  6. mysql_query("INSERT INTO `ordenar_canales`(`id`, `n`) VALUES ('2','$b')");
  7.  
  8. $sql = mysql_query("SELECT id, `n` FROM `ordenar_canales`");
  9. $row = mysql_fetch_array ($sql);
  10. $cid = $row[0];
  11. $cn = $row[1];
  12. $row = mysql_fetch_array ($sql);
  13. $bid = $row[0];
  14. $bn = $row[1];
  15.  
  16. mysql_query("UPDATE `canales` SET `nOrden`='$bn' WHERE id='$cid'");
  17. mysql_query("UPDATE `canales` SET `nOrden`='$cn' WHERE id='$bid'");
Lo importante es no confundir lo que PHP necesita hacer con lo que MySQL requiere obligatoriamente para lograrlo. Estás trabajando con dos ambientes con requisitos diferentes para un mismo fin.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)