【发布时间】:2012-06-20 00:43:48
【问题描述】:
我有两张这样的桌子;
id_image foo bar
1 3 5
2 8 1
3 17 88
7 14 23
8 12 9
id_image bar foo
1 2 3
1 5 6
2 18 11
2 10 12
3 8 21
3 17 81
7 29 50
7 1 14
8 10 26
8 27 34
第一个表中自动递增的id_image 存在间隙。在第二个表中,id_image 指的是第一个表中的id_image,每个 ID 都有两个。
注意:此表为理论值。我不知道在哪里间隙究竟在哪里,或者是否甚至有多个间隙。我只知道第一个值是1,最后一个值高于总行数。
现在,我想弥补这个差距。
在你说差距无关紧要之前,如果他们这样做,那就是糟糕的数据库设计,让我告诉你; 我同意你的看法。
但是,我正在处理的是一个(无可救药的后端)第三方开源系统,我需要将大量没有可交叉引用 ID 的现有数据导入到多个表中。我可以确保相同数据在整个系统的每个表中获得匹配 ID 的唯一方法是按顺序输入,这意味着我不能有间隙。
所以我现在需要做的是;
- 修复第一个表中
id_image列的间隙,使最后一个值与行数匹配。 - 编辑第二个表中的
id_image列,使其值对应于间隙修复之前对应的同一行。
我将如何开始这样做?我知道这可能超出了 MySQL 查询语言的能力,所以 PHP 的答案也是可以接受的。谢谢! :)
【问题讨论】:
-
是的。然而,差距是由于必须重新输入部分数据造成的,而不是由 INSERT IGNORE 错误造成的。 :)
-
你能锁定表格,然后用
SELECT image_id FORM table ORDER BY image_id ASC遍历它并找出差距吗? -
您的意思是手动查找它们?有超过 20,000 条记录,我有一个截止日期:P
-
@EmphramStavanger 不。让我发布一个解决方案来演示它。
-
在第二个表中是否总是有两个表中每个 id 的副本?
标签: php mysql database auto-increment