0

在我的应用程序中,我想交换数据库中的行。

这意味着,我的桌子有以下结构,

Column     Type             Null    Default     Comments

intid         int(11)           No           
intuserid         int(11)           No           
vchimagename      varchar(50)   No  

这里 intid 是主键。

当我使用此功能进行 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;
} 

调用函数,

row_swap('tblupload', 7, 8) ;

然后显示错误,

Duplicate entry '8' for key 'PRIMARY'

那么如何通过使用他们的主键来交换行呢?

如果有可能?

4

2 回答 2

0

更改主键从来都不是一个好的编码习惯。

您得到的错误是因为主键

  • 不能有重复记录(意味着它应该是唯一的)
  • 不能留空

假设您的变量设置为 id1 = 1 id2 = 2

现在您在第一个查询中所做的是将 id2 与 id1 交换

mysql_query("UPDATE $table SET intid='$id1' where intid='$id2'")

现在在数据库中,字段更新为 id1 = 2 id2 = 2

这违反了主键的规则。所以你有一个错误

键“P​​RIMARY”的重复条目“8”

解决方案是将虚拟值作为 temp 然后交换值。如果您解决了交换两个数字的问题(在学校或学习任何编程语言时),您可能已经这样做了。

你取一个临时变量并将数字 A 和 B 交换为

temp = A;
A = B;
B = Temp;

@NobitaZZ 提供的解决方案是正确的,除非并且直到您的 intid 值达到 999999 的标记。选择一个您知道不会干扰您的逻辑的值。

于 2012-07-02T10:17:40.533 回答
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;
} 

您应该使用临时 ID (999999)

于 2012-07-02T08:51:42.743 回答