0

我有一个带有 的表AUTO_INCREMENT id,这个表也有一个parent_id字段。在某些情况下,当插入数据本身是父级并且没有父级时,我需要将其设置parent_id为与其自己的 id 相同的值。

这可能与单个 sql 语句,还是我必须做LAST_INSERT_ID一个单独的更新语句?

谢谢

4

3 回答 3

0

这在技术上是可行的,尽管我强烈反对它。这个查询可以工作的唯一方法是,如果你能保证不会删除任何记录,即使我仍然说不要使用它。但如果你必须...

INSERT INTO `table` (field1, field2, parent_id)
VALUES('data1', 'data2', 
            (SELECT id FROM (SELECT max(id) AS id FROM `table`) AS a) + 1
       )

不过,您最好在 2 个查询中执行此操作。理性是人工智能的工作方式。如果最后一条记录是 20 并被删除,则下一个条目将是 21,但 parent_id 将是 20,因为它将看到max(id)19。

于 2012-08-08T15:05:16.593 回答
0

是的你可以。要获取表的下一个 auto_increment 值,您可以执行以下操作:

SELECT AUTO_INCREMENT 
FROM information_schema.TABLES 
WHERE table_name='table_name' 
AND table_schema='schema_name';

不要使用MAX,因为如果你从表中删除最后一行并计算最大值,它不会给你下一个 auto_increment 值。

于 2012-08-08T15:07:45.713 回答
0

你必须在单独的语句中做。

树系统通常假定“0”为根或无父项的父项或一级项的父项,而“0”在数据库中不存在。

我建议您不要将 item 的 id 设置为该 item 的 parent,因为...这个 item 是他自己的父亲?你真的需要那个吗?

于 2012-08-08T14:56:55.587 回答