一直在寻找这方面的例子,但显然我不太了解这个术语以找到答案:
利用PHP / MySql,我正在尝试在编辑部分数据时复制表格中的记录。
有一个现有的表'信息',如下所示:
1 ID - Int11 AutoIncrement
2 elementID - Int11 Unique
3 text - text utf8
4 loopID - Int11
5 created - datetime
6 modified - datetime
'elementID'和'loopID'字段都包含最后四个DIGITS表示嵌入标识符的值,在本例中是系统中的“页面”。例如:
Page'9000'elementID记录为
100019000
100029000
100039000
和Page'9000'loveID记录为
1009000
1019000
1029000
Page'9001'elementID的记录记录为
100019001
100029001
100039001
和Page'9001'loopID的记录记录为
1009001
1019001
1029001
希望你明白这一点。
我想要做的是当创建新页面时(比如在这种情况下为9002),最终用户可以选择复制来自前一页的所有记录数据(例如,在这种情况下,他们想要复制9001)。 / p>
在深入研究之前,我真的需要了解最佳方法。
起初我以为我想查询匹配9001的所有记录到一个数组中,用elementID替换所有最后4位9001并用9002循环,将'created'和'modified'日期替换为今天,然后将结果数组作为新条目写回数据库?如果是这样,在更换时,查询期间或写回数据库期间应该在什么时候?
然后,当我开始进一步思考时,它让我想知道这是否应该以类似于此的方式完成:
INSERT INTO information...
SELECT REPLACE...
FROM information
[WHERE ..]
我可以看到有足够的元素参与其中,生成它对于像我这样的数据库爱好者来说并不容易......如果有人能指出我这个过程的正确例子,那将是一个很大的帮助。
答案 0 :(得分:0)
的内容
declare newId int;
declare copyFromId int;
declare diff int;
set newId := 9002;
set copyFromId := 9001;
setdiff := newId - copyFromId; -- in this case it will be 1
select into your_table
select null,
elementID + diff, -- so for 100019000 it will be 100019001
text,
loopID + diff, -- same as above
now(),
now()
from your_table
where elementID mod 10000 = copyFromId; -- all lines with en elementId ending in copyFromId
答案 1 :(得分:0)
我认为你的第一个想法就是那个。
从数据库中取出要复制的所有记录,然后在数据库上执行查询,以便在对数据进行更改后重新添加这些记录。除非您需要进行10,000次查询,否则这将非常快。
在SQL语句中执行此操作将非常复杂且不必要。它可能是一个存储过程,但最好的位置是php
。