Php mysql-将行从一个表移动到另一个表或更新

Php mysql-将行从一个表移动到另一个表或更新,php,mysql,Php,Mysql,绘图:我有一个2分贝的PAD网站:submitdata和maindata。 submitdata DB的所有列都是maindata DB加上另外3列: 主数据列:名称链接电子邮件网站。。。。progid 提交数据列:名称链接电子邮件网站。。。。progid,backlink,affiliateid 我必须将所有行从submitdata DB移动到maindata DB,但仅当反向链接!=如果是附属的!=$附属的 另一个问题是,如果progid在maindatadb中已准备就绪,那么在这种情况下,

绘图:我有一个2分贝的PAD网站:submitdata和maindata。 submitdata DB的所有列都是maindata DB加上另外3列:

主数据列:名称链接电子邮件网站。。。。progid 提交数据列:名称链接电子邮件网站。。。。progid,backlink,affiliateid

我必须将所有行从submitdata DB移动到maindata DB,但仅当反向链接!=如果是附属的!=$附属的

另一个问题是,如果progid在maindatadb中已准备就绪,那么在这种情况下,我必须使用新数据更新该行 ... 另一个问题是,我有大约40000行,所以从submitdata中选择*会杀死我的计算机

有没有关于如何在PHP中实现这一点的想法?

试试以下方法:

EXPLAIN SELECT * FROM submitdata;
也许它会告诉您可以为哪些字段提供索引,这会大大加快查询时间。然后,如果不移动反向链接和附加ID字段为空的记录,则可以通过添加WHERE子句来减少查询结果集


您可以使用MySQL帮助,让它完成所有工作,而不是在应用程序层执行。构建查询,然后使用PHP/Perl等提交它

INSERT INTO MAINDATA
(col1, col2, col3....)
SELECT col1, col2... FROM
(
    SELECT col1, col2...
    FROM SUBMITDATA SD
    LEFT OUTER JOIN MAINDATA MD
      ON SD.key1 = MD.key1 and SD.key2 = MD.key
    WHERE
          SD.backlink <> ''
      AND SD.affiliate <> '$affiliatiid'
) ND
ON DUPLICATE KEY
   SET update_col1 = col1
      ,update_col2 = ...
基本上,子查询是获取满足backtick!=和附属公司!=附属的。MySQL将尝试将它们插入MainData,如果该行已经存在于PK/UK中,它将更新您在SET子句中给出的列


注意:如果两个数据库都在一个mysql服务器下,该方法将起作用。

uuhuuu。。。这是一些很好的代码!非常感谢!将返回结果。。再次感谢!不客气!希望能成功如果有不一致的地方请告诉我是的,伙计,成功了。在执行时间上仍然有一些问题,我仍然使服务器超载,但是。。它就像一个将数据从一个表移动到另一个表的符咒。。呵呵!:在更新和插入之后还添加了删除行。
INSERT INTO MAINDATA
(col1, col2, col3....)
SELECT col1, col2... FROM
(
    SELECT col1, col2...
    FROM SUBMITDATA SD
    LEFT OUTER JOIN MAINDATA MD
      ON SD.key1 = MD.key1 and SD.key2 = MD.key
    WHERE
          SD.backlink <> ''
      AND SD.affiliate <> '$affiliatiid'
) ND
ON DUPLICATE KEY
   SET update_col1 = col1
      ,update_col2 = ...