1

我有一个类似于图像的 mysql 表,称为按摩(例如)

id | position | name
1  | 1 | name 1
2  | 2 | name 2
3  | 3 | name 3
4  | 4 | name 4

因此,当我更新、编辑或创建新记录时,我希望表格更新列位置如下。(例如,更新行 id=1,列位置从 1 到 3。)

id | position | name
1  | 3 | name 1
2  | 1 | name 2
3  | 2 | name 3
4  | 4 | name 4

我想出了如何删除一行并创建一个新行。但无法找出如何以正确的顺序更新。我正在使用这样的php代码:
---在插入语句之前mysql_query("UPDATE按摩SET position = position + 1 WHERE position >= '$position'"); ---
,它工作正常并返回为。如果在位置 2 处插入 id=5。

id | position | name
1  | 1 | name 1
2  | 3 | name 2
3  | 4 | name 3
4  | 5 | name 4
5  | 2 | name 4

希望有人可以帮助我解决这个问题。
提前致谢。

4

3 回答 3

1

此 SQL 将处理您的更新案例。你需要知道old position, thenew position和 theid来生成它。

$sql = "UPDATE `massage` 
        SET `position` = `position` + SIGN({$old_position} - {$new_position})
        WHERE `position` BETWEEN {$old_position} AND {$new_position}
            AND `id` <> {$id}";
于 2013-07-02T02:09:06.103 回答
1


我找到了我的问题的解决方案,我在这里发布,所以如果有人在寻找类似的东西可以检查出来。
这是更新表的代码。
在示例表名中按摩。该变量$old_position是一个 select 语句,用于通过 id 使用 where 子句进行检查。变量$position来自形式并与新位置相关。

if($old_position > $position)
{                               
    mysql_query("UPDATE `massage` SET position = position + 1 WHERE position BETWEEN '$position' AND '$old_position'");
}

if($old_position < $position)
{
    mysql_query("UPDATE `massage` SET position = position - 1 WHERE position BETWEEN '$old_position' AND '$position'");
}

mysql_query("UPDATE `massage` SET position = '$position', name = '$name', visible = '$visible', content = '$content', date = '$date' WHERE id = '$id'");

这是删除一行并更新位置

mysql_query("UPDATE `massage` SET position = position - 1 WHERE position > '$position'");
mysql_query("DELETE FROM `massage` WHERE id = '$id' LIMIT 1");

最后是要插入的代码

mysql_query("UPDATE `massage` SET position = position + 1 WHERE position >= '$position'");
mysql_query("INSERT INTO `massage` (position, name, visible, content, date) VALUES ('{$position}', '{$name}', '{$visible}', '{$content}', '{$date}')");

感谢大家拿东西帮忙。

于 2013-07-06T00:09:56.750 回答
0

您应该检查新位置是否大于或小于先前位置。如果新仓位较大,则旧仓位和新仓位之间的每个仓位都必须负1

例如从第 3 位到第 8 位,您需要将当前的第 4 位到第 8 位移动到第 3 位到第 7 位,并将旧的第 3 位更新到第 8 位(使用它的 id 而不是它的位置来更新它,因为此时,你有两个 3rd职位)

如果新位置更小,则同样适用,但变化为加 1

例如,从第 8 位到第 3 位,您需要将当前的第 3 位到第 7 位移动到第 4 位到第 8 位,并将旧的第 8 位更新到第 3 位(使用它的 id 而不是它的位置来更新它,因为此时,你有两个第 8 位职位)

于 2013-07-02T02:20:41.507 回答