Intercambio de filas en las tablas de la base de datos mediante el uso de la clave principal en php/mysql

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?

preguntado el 02 de julio de 12 a las 09:07

¡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, ¿cómo puedo cambiar las filas? -

¿Por qué ¿Estás tratando de 'intercambiar' filas? -

Actualice otros campos de esas filas y no intente cambiar su initid as PRIMARY KEY -

2 Respuestas

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

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 or haz tu propia pregunta.