1

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

他在新数据库中有 500 多篇文章,更新一篇对这个查询来说不是问题

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

但是我将如何对所有 500 篇带有 1 个查询的文章执行此操作?我已经有来自旧数据库的导出查询,其中包含帖子标题和点击次数,因此我们可以更轻松地找到新数据库

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

两个表中唯一的参考是标题中的产品名称单词,其他所有内容都不同,id,完整标题......

4

4 回答 4

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;
于 2012-08-20T04:53:31.967 回答
0

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

但是,如果您有 2 个表,它们之间绝对没有关系或共同的标识符,那么您就有点困难了。在这种情况下,困难的地方意味着您必须手动完成所有操作:(

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

于 2012-08-20T04:21:59.983 回答
0

不幸的是,这不是它的工作原理,您必须编写一个执行循环的脚本/程序。

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

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

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

于 2012-08-20T04:22:08.627 回答
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;
于 2012-08-20T07:18:22.323 回答