2012-03-30 68 views
2

我目前正在将一个Drupal博客迁移到Wordpress的MySQL数据库上。mySQL命令来聚合匹配(Drupal到Wordpress迁移)

我已经导入我的所有职位,目前我想所有我的Drupal后的图像(位于story_image小部件)的关联到我的WordPress的职位。

当我运行此查询:

UPDATE IGNORE wordpress.wp_posts p, drupal.content_field_story_image i, drupal.files f 
SET p.post_content = 
CONCAT(
    f.filename, ' ', p.post_content 
) 
WHERE p.ID = i.nid 
AND i.field_story_image_fid = f.fid 
AND (
    f.filename LIKE '%.jpg' 
    OR f.filename LIKE '%.jpeg' 
    OR f.filename LIKE '%.png' 
    OR f.filename LIKE '%.gif' 
); 

我所有的WordPress的职位预先计划他们的图像只有一个,但我希望它前面加上所有的人的名单。

我有点生锈用sql的东西,想知道什么,语句将每次追加文件名有一个正确的匹配,而不是仅仅一次。

这里是数据库和表我与

DATABASE: wordpress 


TABLE: wp_posts 

id | post_content 
------------------ 
1 | hello 



DATABASE: drupal 


TABLE: content_field_story_image 

nid | field_story_image_fid 
---------------------------- 
1 | 18 
1 | 19 


TABLE: files 

fid | filename 
--------------- 
18 | alpha.jpeg 
19 | beta.jpeg 

预计POST_CONTENT工作更新后的简化版本:更新后

beta.jpeg alpha.jpeg hello 

实际POST_CONTENT:

alpha.jpeg hello 

我可能甚至不应该在UPDATE ... SET中开始。在此先感谢您的任何建议。

更新:

感谢提供我一直在GROUP_CONCAT玩弄的答案

我现在有这样的查询返回的图像列表每篇文章

SELECT GROUP_CONCAT(drupal.files.filename SEPARATOR ' ') 
       FROM wordpress.wp_posts , drupal.content_field_story_image, drupal.files 
       WHERE wordpress.wp_posts.ID = drupal.content_field_story_image.vid 
       AND drupal.content_field_story_image.field_story_image_fid = drupal.files.fid 
       AND (
        drupal.files.filename LIKE '%.jpg' 
        OR drupal.files.filename LIKE '%.jpeg' 
        OR drupal.files.filename LIKE '%.png' 
        OR drupal.files.filename LIKE '%.gif' 
       ) 
       GROUP BY wordpress.wp_posts.ID; 

现在只需要寻找一种方法将该列表插入每个WordPress的帖子。

+0

我也有简单的“UPDATE”试过这个,而不是“UPDATE忽略”,但无济于事。 – 2012-03-30 07:18:18

回答

0

尝试GROUP_CONCAT如下:

UPDATE IGNORE wordpress.wp_posts p, drupal.content_field_story_image i, drupal.files f 
SET p.post_content = 
CONCAT(
    group_concat(f.filename SEPARATOR ' '), ' ', p.post_content 
) 
WHERE p.ID = i.nid 
AND i.field_story_image_fid = f.fid 
AND (
    f.filename LIKE '%.jpg' 
    OR f.filename LIKE '%.jpeg' 
    OR f.filename LIKE '%.png' 
    OR f.filename LIKE '%.gif' 
); 
+0

感谢您的快速回复!在运行查询时,我得到“#1111 - 无效的组功能使用” – 2012-03-30 07:47:56

+0

你必须在你的查询中使用“Group By”子句,尝试使用'group by p.post_content' – Vikram 2012-03-30 08:14:39

+0

hmm仍然不起作用。我想我不能在像这样的SET中使用group_concat?也许? – 2012-03-30 08:16:27