【问题标题】:Updating table with only one columns data that changes更新表中只有一列数据发生变化
【发布时间】:2017-11-11 08:37:06
【问题描述】:

我在 mysql 中有一个表,我正在尝试更改行的位置

|Id    |Content      |Position
------------------------------
|101   |"Yellow"     |1
|201   |"Red"        |2
|301   |"Blue"       |3 
|401   |"Black"      |4

成为这个

|Id    |Content      |Position
------------------------------
|101   |"Yellow"     |2
|201   |"Red"        |3
|301   |"Blue"       |1
|401   |"Black"      |4

我使用 PHP 更新此表,我拥有的唯一数据是更改的位置,例如,如果我想将 Yellow 的位置更改为 3,我拥有的唯一数据是 3,所以我希望能够将 3 以下的所有内容重新排序为1,2 和超过 3 的一切都是 4,5.. 我唯一的数据是做这个改变是 3. 我会怎么做?应该使用 PHP 脚本还是 mysql 查询来完成?哪个更容易实现?

我试过了

"UPDATE table SET position = 3 WHERE position = 2"
"UPDATE table SET position = 2 WHERE position = 3"

这不会在语句中使用 ORDER BY,因为位置基本上是交换的。可能我必须在 mysql 中创建一个 tmp 变量来存储旧位置?

我更新了我的 api 端点,所以我基本上是从 JavaScript 获得订单的 并使用了 sql https://stackoverflow.com/a/15635201/4960941

它有效。

我只使用位置作为保持 ajax 请求尽可能小的一种手段,但目前这可行。有时间我会尝试优化。

【问题讨论】:

  • 你经常换职位吗?如果是这样,您可以对 PHP 文件进行更新查询。
  • 是的,职位不断变化。我可以访问的唯一数据是通过 PHP 更改的位置。我遇到的 PHP 问题是会有相同位置的行,我需要将一行移到另一行的上方或下方。
  • 如果将 Yellow 更改为 3,那么我的意思是“红色”的当前元素呢?它会交换还是做其他事情?
  • 是元素红色位置将在更改之前更改为黄色位置。

标签: php mysql


【解决方案1】:

也许我问错了,但你为什么不干脆这样做:

update your_table set Position = 0 where Position = 3;
update your_table set Position = Position + 1 where Position < 3;

最初没有 Position

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2023-03-17
    • 2022-10-24
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多