【问题标题】:How could I shorten my mysql query to allow me to swap indexes in my mysql database?如何缩短我的 mysql 查询以允许我交换 mysql 数据库中的索引?
【发布时间】:2012-01-23 17:33:53
【问题描述】:
$database->query("UPDATE main_navigation SET id = ? WHERE id = ?", array($intTempIndex, $intNewIndex));
$database->query("UPDATE main_navigation SET id = ? WHERE id = ?", array($intNewIndex, $intOldIndex));
$database->query("UPDATE main_navigation SET id = ? WHERE id = ?", array($intOldIndex, $intTempIndex));

我在找出更短的方法然后使用 3 个查询来交换我的数据库中的 id 时遇到了一些麻烦。有没有可能比这个更短?如果可以,我可以举个例子吗?

注意:$database->query 是我的自定义函数。

【问题讨论】:

  • 能否请您添加您使用 E.G PDO 的数据库处理程序对象的名称,或告知用户您使用自定义数据库处理程序对象(如果有人从 google 中点击这个,我会感到困惑)

标签: php mysql sql


【解决方案1】:
update main_navigation
set id = case
    when i1 then i2
    when i2 then i1
end
where id in (i1, i2);

(编辑添加了 where 子句,以便不更新所有行 -- 嗯)

【讨论】:

  • 2 查询版本是这样的:交换 1 和 2 将:{1 and 2} 更改 2 中的 1 {2 and 2} 更改 1 中的 2 {1 and 1} => 这看起来不像交换对我来说。
  • 好吧,我才明白为什么需要一个临时的:id 有一个独特的约束...
  • 使用唯一约束,您的版本和您似乎暗示的 2 查询版本会出现问题。如果没有唯一约束,您将得到我发布的内容:2 相同的值,因为您无法区分交换的和要交换的。
  • @Nanne 不,你不会!这就是该声明的全部要点:它是原子的!试试看
  • 无论如何,我的第一条评论是关于你关于 2-way 的陈述
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2013-06-12
相关资源
最近更新 更多