用1个查询更新多个mysql行?

时间:2012-08-20 04:10:09

标签: mysql

我正在将客户端数据库移植到具有不同帖子标题和行ID的新客户端数据库,但他希望保留旧网站的点击量,

他在新数据库中有超过500篇文章,更新一篇文章不是这个查询的问题

UPDATE blog_posts 
SET hits=8523 WHERE title LIKE '%slim charger%' AND category = 2

但是如何通过1个查询对所有500篇文章执行此操作?我已经有来自旧数据库的导出查询和帖子标题和点击,所以我们可以更容易地找到新的

INSERT INTO `news_items` (`title`, `hits`) VALUES
('Slim charger- your new friend', 8523 )...

两个表中唯一的引用是标题中的产品名称字,其他一切都不同,id,完整标题......

4 个答案:

答案 0 :(得分:3)

tmp

中为旧数据制作一个old_posts
UPDATE new_posts LEFT JOIN old_posts ON new_posts.title = old_posts.title SET new_posts.hits = old_posts.hits;

答案 1 :(得分:0)

我不是100%确定您可以一次更新多个记录,但我认为您要做的是将循环与更新查询结合使用。

但是,如果你有2个表之间没有任何关系或它们之间有共同的标识符,那么你就有点困难了。在这种情况下,硬盘的意思是你必须手动完成所有这些:(

保存你的最后一个可能的想法是id可能不同,但它们可能仍然具有相同的顺序。如果是这种情况,您仍然可以遍历旧表并更新数字表,如上所述。

答案 2 :(得分:0)

不幸的是,它不是如何工作的,你将不得不编写一个循环的脚本/程序。

articles cursor;
selection articlesTable%rowtype;
WHILE(FETCH(cursor into selection)%hasNext)
Insert into newTable selection;
END WHILE

如何桥接它取决于你,但那是基本的伪代码/ PLSQL。

用于从一个数据库中选择并放入另一个数据库的API因DBMS而异,因此您需要一个通用的中间格式。基本上从第一个数据库获取记录,将其粘贴到您选择的编程语言中的结构中,并使用这些结构值使用API​​为其他DBMS预先插入。

答案 3 :(得分:0)

您可以构建一个为您执行此操作的过程:

CREATE PROCEDURE insert_news_items()
BEGIN
DECLARE news_items_cur CURSOR FOR
    SELECT title, hits
    FROM blog_posts
    WHERE title LIKE '%slim charger%' AND category = 2;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;


OPEN news_items_cur;
LOOP

    IF done THEN
      LEAVE read_loop;
    END IF;

    FETCH  news_items_cur
    INTO   title, hits;

    INSERT INTO `news_items` (`title`, `hits`) VALUES (title, hits);

END LOOP;
CLOSE news_items_cur;
END;