2

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

利用 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”字段都包含最后四位数字表示嵌入标识符的值,在这种情况下是系统中的“页面”。例如:

页面 '9000' elementID 记录为

100019000
100029000
100039000

和页面 '9000' loopID's 记录为

1009000
1019000
1029000

页面'9001' elementID 的记录被记录为

100019001
100029001
100039001

和页面 '9001' loopID 的记录被记录为

1009001
1019001
1029001

希望你明白这一点。

我想要做的是当创建一个新页面时(例如在这种情况下为 9002),最终用户可以选择复制前一页中的所有记录数据(例如在这种情况下他们想要复制 9001)。

在我深入研究之前,我真的需要了解最好的方法是什么。

起初我想我想将所有匹配 9001 的记录查询到一个数组中,替换 elementID 中的所有最后 4 位 9001 并用 9002 循环,将“创建”和“修改”日期替换为今天,然后写生成的数组作为新条目返回数据库?如果是这样,在查询期间或写回数据库期间应该在什么时候进行替换?

然后,当我开始进一步思考时,这让我想知道是否应该以类似于此的方式来完成:

INSERT INTO information...
SELECT REPLACE... 
FROM information
[WHERE ..]

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

4

2 回答 2

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
于 2012-12-09T08:34:47.780 回答
0

我认为您的第一个想法是可以接受的。

从数据库中提取您要复制的所有记录,然后在对数据进行更改后在数据库上执行查询以将这些记录重新添加。除非您需要进行 10,000 次查询,否则这将非常快。

在 SQL 语句本身中执行此操作将非常复杂且没有必要。它可能是一个存储过程,但最好的地方是在你的php.

于 2012-12-09T08:37:22.807 回答