Intercambio de filas en las tablas de la base de datos mediante el uso de la clave principal en php/mysql
Frecuentes
Visto 1,088 equipos
0
En mi aplicación, quiero intercambiar filas en la base de datos.
Eso significa que mi mesa tiene la siguiente estructura,
Column Type Null Default Comments
intid int(11) No
intuserid int(11) No
vchimagename varchar(50) No
Aquí intid es la clave principal.
Cuando uso esta función para wsapping,
function row_swap($table, $id1, $id2)
{
if (!mysql_query("UPDATE $table SET intid='$id1' where intid='$id2'"))
{
echo mysql_error() ;
exit ;
}
if (!mysql_query("UPDATE $table SET intid='$id2' where intid='$id1'"))
{
echo mysql_error() ;
exit ;
}
return 1;
}
Función de llamada,
row_swap('tblupload', 7, 8) ;
Entonces muestra error,
Duplicate entry '8' for key 'PRIMARY'
Entonces, ¿cómo puedo intercambiar filas usando su clave principal?
¿Si es posible?
2 Respuestas
0
function row_swap($table, $id1, $id2)
{
if (!mysql_query("UPDATE $table SET intid='999999' where intid='$id2'"))
{
echo mysql_error() ;
exit ;
}
if (!mysql_query("UPDATE $table SET intid='$id2' where intid='$id1'"))
{
echo mysql_error() ;
exit ;
}
if (!mysql_query("UPDATE $table SET intid='$id1' where intid='999999'"))
{
echo mysql_error() ;
exit ;
}
return 1;
}
Debe usar una identificación temporal (999999)
Respondido 02 Jul 12, 09:07
0
Cambiar la clave principal nunca es una buena práctica de codificación.
El error que está recibiendo se debe a que la clave principal
- no puede tener un registro duplicado (significa que debe ser único)
- no se puede dejar NULL
suponga que sus variables se establecieron como id1 = 1 id2 = 2
Ahora lo que hiciste en la primera consulta es que cambiaste el id2 con id1
mysql_query("UPDATE $table SET intid='$id1' where intid='$id2'")
en la base de datos ahora los campos se actualizan como id1 = 2 id2 = 2
esto viola la regla de la clave principal. entonces tienes un error
Entrada duplicada '8' para la clave 'PRIMARIO'
La solución es tomar un valor ficticio como temporal y luego intercambiar los valores. Es posible que haya hecho esto si hizo el problema de intercambiar dos números (en la escuela o mientras aprendía cualquier lenguaje de programación).
tomas una variable temporal e intercambias el número A y B como
temp = A;
A = B;
B = Temp;
La solución provista por @NobitaZZ es correcta a menos y hasta que su valor intid llegue a la marca de 999999. elija un valor que sepa que no interferirá con su lógica.
Respondido 02 Jul 12, 11:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php mysql rows swap or haz tu propia pregunta.
¡No! no lo hagas No es una buena idea cambiar nunca los valores de la clave principal, así que no se acostumbre. Romperá cualquier relación con esa tabla de otras tablas relacionadas. - Mark Baker
@Mark Baker, ¿cómo puedo cambiar las filas? - galtech.Mariya
¿Por qué ¿Estás tratando de 'intercambiar' filas? - eggyal
Actualice otros campos de esas filas y no intente cambiar su
initid
asPRIMARY KEY
- Farahmand