Команда mySQL для объединения совпадений (переход с Drupal на Wordpress) - PullRequest
2 голосов
/ 30 марта 2012

В настоящее время я выполняю миграцию блога Drupal в Wordpress на базе данных MySQL.

Я импортировал все свои сообщения, и в настоящее время я пытаюсь связать все мои изображения постов на 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

Фактический пост_контент после обновления:

alpha.jpeg hello

У меня, вероятно, даже не должно быть этого в ОБНОВЛЕНИИ ... 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.

1 Ответ

0 голосов
/ 30 марта 2012

попробуйте 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'
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...