【问题标题】:Duplicate records into same table with variation PHP MySql使用变体 PHP MySql 将记录复制到同一个表中
【发布时间】:2012-12-09 08:21:11
【问题描述】:

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

利用 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'元素ID记录为

100019000
100029000
100039000

和 Page '9000' loopID 记录为

1009000
1019000
1029000

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

100019001
100029001
100039001

Page '9001' loopID 的记录被记录为

1009001
1019001
1029001

希望你能明白。

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

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

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

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

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    类似的东西

    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
    

    【讨论】:

    • 您好,非常感谢!考虑到我的经验(或缺乏经验),托比可能是对的 - 但这看起来太酷了,不能不尝试......我遵循这里的想法,虽然你比我的朋友聪明得多;-) 不确定我是否理解“元素 ID 在哪里” mod 10000' 部分 - 我认为 mod 是用于返回除法余数?所以我很难弄清楚这将如何输出......我会一直在想一些更像 substr($input, -4) 的东西......?无论如何,我一定会试一试并再次报告 tx!
    • 除数余数正是您想要的。看看这些例子sqlfiddle.com/#!2/c960a/39 当分隔符是偶数 10、100、1000 等时,它只会切掉上面的部分,类似于子字符串,但用于数字。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2021-12-16
      • 2015-05-05
      相关资源
      最近更新 更多