0

我有下表:

- id (PK, int, Autoincrement)
- fk (foreign key, int)
- somedata (whatever)
- list_order (int)

我需要按 list_order 为给定 fk 定义的顺序返回一些数据。没问题:SELECT somedata FROM myTable WHERE fk=123 ORDER BY list_order

我的问题涉及如何最好地添加一条记录,如果我希望它成为给定 FK 的最后一条记录。我是否首先需要对给定的 fk 查询执行 MAX(list_order),然后再执行一个单独的查询来插入新行,或者我可以在一个查询中以某种方式执行此操作吗?请注意,记录的顺序可能会更改,因此我不能简单地摆脱 list_order 并使用 ORDER BY id。

谢谢

4

1 回答 1

2

你可以做一个查询:

INSERT INTO tableX
  ( fk, somedata, list_order)
SELECT
    fk, @somedata, MAX(list_order) + 1
FROM tableX
WHERE fk = @fk ;

不利的一面是,如果您有许多并发插入语句,则两个(或更多)可能会尝试将相同的值插入到fklist_order列中。因此,由于您可能UNIQUE在组合中受到限制,因此(fk, list_order)除了其中一个之外,所有这些都将失败。

于 2013-01-07T14:49:43.903 回答