【问题标题】:php+mysqlupdatephp+mysql更新
【发布时间】:2011-10-10 04:18:59
【问题描述】:

我有以下mysql表数据 其中主键是 (id,seq)

id  name  seq
------------
1    a     1
1    b     2
1    c     3
1    d     4

现在我要做的是删除第一行并将剩余行中 seq 的值减少 1

我正在使用 php PDO。我已经删除了第一行,然后在 $result 中获取了剩余的行,然后做了以下操作

while($row1 = mysql_fetch_array($result,MYSQL_ASSOC))

 $dbh->exec("update tablename set seq = seq-1 where id  = $row1['id'] and seq > 1 ");

我收到以下错误

SQLSTATE[23000]:违反完整性约束:1062 键“PRIMARY”的重复条目

谁能帮我解决这个问题?

【问题讨论】:

  • 您在$result 中的行是否按seq 排序?
  • 我刚刚从 .... 中选择 * 并将其放入结果中
  • 用select * from tablename order by seq asc试试这个

标签: php mysql


【解决方案1】:

我不知道我是否理解你的问题,但如果这个while语句:

while($row1 = mysql_fetch_array($result,MYSQL_ASSOC))

循环遍历“b”、“c”和“d”行,问题在于,在第一个循环中,b、c 和 d 的“seq”值分别为 1、2、3,然后在在第二个循环中,b、c 和 d 的 sec 值将是 1、1 和 to。也许这就是问题所在。 我认为你应该做的是: 1)删除第一行 2) 只执行一次查询

$dbh->exec("update tablename set seq = seq-1 where id  = $row1['id'] and seq > 1 ");

您可以从已删除的行中获取 id。此外,为了确保一切正常,您应该在查询中添加 order by 语句:

$dbh->exec("UPDATE tablename SET seq = seq-1 WHERE id = $row1['id'] AND seq > 1 ORDER BY seq ASC ");

希望对你有帮助!

【讨论】:

    【解决方案2】:

    因为你把主键(id,seq)设置在一起了。主键的基本属性是......它将是唯一的而不是NULL。所以必须违反 id 和 seq 组合的唯一性,这就是为什么你会低于错误。

    REFERENCE

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2013-03-12
      • 2012-07-20
      • 2012-04-13
      • 2010-12-17
      相关资源
      最近更新 更多