Database 在表中插入行并跟踪列表顺序

Database 在表中插入行并跟踪列表顺序,database,Database,我有下表: - id (PK, int, Autoincrement) - fk (foreign key, int) - somedata (whatever) - list_order (int) 我需要按照给定fk的列表顺序返回一些数据。没问题:从myTable中选择一些数据,其中fk=123按列表顺序排列 我的问题涉及如何最好地添加一条记录,如果我希望它是给定FK的最后一条记录。我需要先对给定的fk查询执行MAX(列表顺序),然后执行单独的查询以插入新行,还是可以在一个查询中执行此操作

我有下表:

- id (PK, int, Autoincrement)
- fk (foreign key, int)
- somedata (whatever)
- list_order (int)
我需要按照给定fk的列表顺序返回一些数据。没问题:
从myTable中选择一些数据,其中fk=123按列表顺序排列

我的问题涉及如何最好地添加一条记录,如果我希望它是给定FK的最后一条记录。我需要先对给定的fk查询执行MAX(列表顺序),然后执行单独的查询以插入新行,还是可以在一个查询中执行此操作?请注意,记录的顺序可能会更改,因此我不能简单地取消列表顺序,而是使用按id排序


谢谢

您可以通过一个查询完成此操作:

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

缺点是,如果有多个并发insert语句,则其中两个(或多个)可能会尝试将相同的值插入
fk
list\u order
列。因此,由于在
(fk,list\u order)
组合中可能有一个
唯一的
约束,除了一个之外,其他所有约束都会失败。

谢谢,我肯定会使用这种方法。好奇的是,使用INSERT/SELECT查询,而不是执行两个单独的查询并使用服务器代码(PHP等)将其粘合在一起,这通常是一个好主意吗?