【问题标题】:Insert from MySQL joined table从 MySQL 连接表插入
【发布时间】:2016-12-07 12:02:36
【问题描述】:

我有两个名为 drupalwordpress 的数据库。我尝试将帖子图像路径从 drupal 6 迁移到 wp。

drupal.content_field_imagedrupal_files 包含必要的数据:

drupal.content_field_image 有 field_image_fid - nid 对。 drupal.drupal_files 具有 fid - 文件路径对 (field_image_fid = fid)。

我需要获取同时包含 nid 和文件路径的表,所以我加入了这些表:

SELECT * 
FROM `content_field_image` 
JOIN `files` ON content_field_image.field_image_fid = files.fid;

现在我需要将数据插入wordpress db 以便:

meta_id = 34 + n(n 为增量)

post_id = nid 来自连接表

meta_key = fifu_image_url

meta_value = filepath 来自连接表

所以我有一些问题:

  1. 如何从连接表中插入?
  2. 如何创建类似 while 的循环来插入连接表中的每个条目?
  3. 如何在每次插入后使 n 加 1?

【问题讨论】:

  • 使用“从选择中插入”查询类型。你所有的值插入每个icrement。你也可以使用连接。但请确保列名相同。首先尝试在本地进行验证。

标签: mysql wordpress drupal drupal-6


【解决方案1】:

如何从连接表中插入?

使用INSERT INTO .. SELECT FROM 构造

每次插入后如何使n加1?

将该列 n 声明为 auto_increment 列。否则,如果您的相关表已经有一个 auto_increment 列,则您必须自己做。

如何制作类似while的循环来插入连接表中的每个条目

你根本不需要那个。 INSERT .. SELECT 构造会将所有获取的行插入到您引用的表中。

【讨论】:

    【解决方案2】:

    您的 select 插入可能是这样的:

    insert into wordpress.table
    SELECT (@i:=@i+1), nid, fifu_image_url, filepath
    FROM drupal.content_field_image
    JOIN drupal.files ON content_field_image.field_image_fid = files.fid;
    join (select @i:=34) inc on true
    

    要使其正常工作,您选择的列必须与您插入的表具有相同的列。

    增量 int 可以用这个变量 @i 来创建,如你所愿初始化为 34,并以 1 递增 1 作为打印结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2023-03-22
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多