使用变体PHP MySql将记录复制到同一个表中

时间:2012-12-09 08:21:12

标签: php mysql

一直在寻找这方面的例子,但显然我不太了解这个术语以找到答案:

利用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 ..]

我可以看到有足够的元素参与其中,生成它对于像我这样的数据库爱好者来说并不容易......如果有人能指出我这个过程的正确例子,那将是一个很大的帮助。

2 个答案:

答案 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