首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -将行从一个表移动到另一个表或更新

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

Stack Overflow用户
提问于 2011-11-05 06:35:55
回答 2查看 1.7K关注 0票数 1

情节:我有一个有2个数据库的PAD网站:提交数据和主要数据。submitdata DB的所有列都是maindata DB,另外还有3列:

MAINDATA列:名称链接电子邮件网站....progid SUBMITDATA列:名称链接电子邮件网站....progid、反向链接、关联

我必须将所有行从submitdata DB移动到maindata DB,但只有在反向链接!='‘和affiliateid != $affiliateid的情况下。

另一个问题是,如果progid在maindata DB中已经准备就绪,那么在这种情况下,我必须用新数据更新该行……另一个问题是,我有大约40.000行,所以SELECT * FROM submitdata有点杀死我的计算机。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 06:41:24

试试这个:

代码语言:javascript
复制
EXPLAIN SELECT * FROM submitdata;

也许它会告诉您可以为哪些字段建立索引(这可以大大加快查询时间)。然后,如果您不打算移动其反向链接和关联if字段为空的记录,则可以通过添加WHERE子句来减少查询的结果集。

代码语言:javascript
复制
$result = mysql_query('SELECT * FROM submitdata WHERE backlink <> "" AND affiliateid <> ""');
if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
        $newResult = mysql_query(sprintf('SELECT name,progid FROM maindata WHERE progid = %d', $row['progid']));
        $row2 = mysql_fetch_row($newResult);
        if ($row2) {
            // do UPDATE query
        } else {
            // do INSERT query
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-05 07:41:58

你可以使用MySQL帮助,让它做所有的工作,而不是在应用层做这些工作。构建查询,然后使用PHP/Perl等提交查询。

代码语言:javascript
复制
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 = ...

基本上,子查询获取的是所有满足回号!= '‘和affiliate != affiliateid条件的行。MySQL将尝试将它们插入到MainData中,如果行已经存在(基于PK/UK),它将更新您在SET子句中给定的列。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8016487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档