2015-11-06 2 views
0

Я уверен, что это было задано раньше, но я не могу полностью установить связь с тем, что я пытаюсь сделать с тем, что нашел. Я думаю, это потому, что я хочу сделать это со второй таблицы и с не ключевым полем.обновление, если строка существует еще вставить новую запись, используя данные из другой таблицы

В основном у меня есть эта учебная таблица. Ключевые слова, содержащие ключевые слова для разных курсов.

+-----------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| course_id | int(11)  | NO | MUL | NULL |    | 
| keyword | varchar(100) | NO | MUL | NULL |    | 
| excerpt | longtext  | NO |  | NULL |    | 
| explained | longtext  | NO |  | NULL |    | 
| slug  | varchar(100) | NO |  | NULL |    | 
+-----------+--------------+------+-----+---------+----------------+ 

и у меня есть выписка из старого WordPress сайта, который содержит много теории нот с названиями, которые соответствуют некоторые из ключевых слов в таблице выше.

+------------------+----------------+------+-----+---------+-------+ 
| Field   | Type   | Null | Key | Default | Extra | 
+------------------+----------------+------+-----+---------+-------+ 
| wp_ID   | int(4)   | YES |  | NULL |  | 
| wp_post_date  | varchar(19) | YES |  | NULL |  | 
| wp_post_modified | varchar(19) | YES |  | NULL |  | 
| wp_post_status | varchar(7)  | YES |  | NULL |  | 
| wp_post_title | varchar(35) | YES |  | NULL |  | 
| wp_post_content | varchar(10435) | YES |  | NULL |  | 
| wp_post_excerpt | varchar(224) | YES |  | NULL |  | 
| wp_post_parent | int(1)   | YES |  | NULL |  | 
| wp_post_name  | varchar(33) | YES |  | NULL |  | 
| wp_post_type  | varchar(8)  | YES |  | NULL |  | 
+------------------+----------------+------+-----+---------+-------+ 

Если ключевое слово найдено, я хочу, чтобы обновить выдержку и объяснил поля со старыми данными WordPress, дающими это курс идентификатор 2. Если ключевое слово не существует, я хотел бы, чтобы вставить новую строку и дать it the course_id of 4.

Я начал с этого from here, но не могу закончить его.

IF NOT EXISTS (SELECT * FROM `curriculum.keywords` WHERE `keyword` = STUCK HERE) THEN 

    INSERT INTO `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
    SELECT `wp_post_title`, `wp_post_excerpt`, `wp_post_content`, `wp_post_name`, 4 FROM `aimport-notes` 

    ELSE 

    UPDATE `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
    SELECT `wp_post_title`, `wp_post_excerpt`, `wp_post_content`, `wp_post_name`, 4 FROM `aimport-notes` 
    WHERE `curriculum.keywords`.`keyword` = `aimport-notes`.`wp_post_title` 

    END IF; 

С благодарностью в ожидании вашей помощи.

Chris

+0

Что делать, если ключевое слово встречается более чем в одном Записи WP? – JimmyB

ответ

0

запрос для вставки данных с новыми ключевыми словами:

INSERT INTO `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
SELECT notes.`wp_post_title`, notes.`wp_post_excerpt`, notes.`wp_post_content`, notes.`wp_post_name`, 4 
FROM `aimport-notes` notes left join `curriculum.keywords` keywords on 
notes.keyword=keywords.wp_post_title where keywords.keyword is null; 

запрос для обновления соответствующего ключевого слова записей:

update `curriculum.keywords` keywords 
inner join `aimport-notes` notes on notes.keyword=keywords.wp_post_title 
set keywords.keyword=notes.wp_post_title, 
    keywords.excerpt=notes.wp_post_excerpt, 
    keywords.explained=notes.wp_post_content, 
    keywords.slug=notes.wp_post_name, 
    keywords.course_id=4; 
+0

@ hanno-binder, ваше предложение может быть правильным, и у вас было хорошее представление о дублирующих заголовках, но я выбрал этот подход Code-Monk, как это было в двух частях - мне легче ориентироваться. Помимо нескольких ошибок имени поля, он работал отлично. Спасибо за помощь в пятницу. –

0
IF NOT EXISTS (
    SELECT 1 FROM `curriculum.keywords` kw 
    INNER JOIN `wordpress` wp 
    ON wp.wp_post_title LIKE CONCAT('%', kw.keyword, '%') 
) 
...