mysql - 将行从一个表格移动到另一个表格或更新
问题描述:
PLOT:我有一个有2个DB的PAD网站:submitdata和maindata。 的submitdata DB具有所有列的maindata DB加上另外3列:mysql - 将行从一个表格移动到另一个表格或更新
MAINDATA列:名称链接的电子邮件网站....进程id SUBMITDATA列:名称链接的电子邮件网站....进程id,反向链接,AFFILIATEID
我必须将所有行从submitdata DB移动到maindata数据库,但只有IF反向链接!=''和IF affiliateid!= $ affiliateid。
的另一个问题是,如果该进程id是媒体链接在maindata DB和它这种情况下,我必须更新与新的数据 该行......另一个问题是,我有大约40.000行,以便SELECT * FROM submitdata还挺杀死我的电脑 。
关于如何在PHP中做到这一点的任何ideea?
答
试试这个:
EXPLAIN SELECT * FROM submitdata;
也许它会告诉你哪些字段,你可以给一个索引(这可能加快查询时间大大)。然后,如果您不打算移动反向链接和affiliateid字段为空的记录,则可以通过添加WHERE
子句来减少查询中的结果集。
$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
}
}
}
答
你可以采取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 = ...
基本上子查询得到满足的是反引号!=“”和会员!= AFFILIATEID条件的所有行提交。 MySQL会尝试将它们插入到MainData中,如果该行已经存在(基于PK/UK),它将更新您在SET子句中给出的列。
注意:如果两个数据库都在一个mysql服务器下,该方法将工作。
uuhuuu ...那是一些不错的代码!感谢BUNCH!将发布结果..再次感谢! –
不客气!希望它能解决..只有我知道是否有任何差异。 –
是的男人,让它工作。仍然有执行时间的一些问题,我仍然超载服务器,但嘿..它的作用就像将数据从一个表移动到另一个表......嘿! :)更新和插入后还添加了删除行。 –