MySQL

Запросы для заполнения таблицы данными из других таблиц

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

Если две таблицы одинаковы по структуре, все просто:

INSERT INTO `table_1` SELECT * FROM `table_2`

Для таблиц с разными названиями полей придется делать «подгонку». В запросе данные из `table_2` добавляются `table_1`

INSERT INTO `table_1` (`id`, `name`, `keywords`, `text`)
SELECT
    NULL AS `id`,
    `title` AS `name`,
    `words` AS `keywords`,
    `short_text` AS `text`
FROM
    `table_2`

Соединение полей

INSERT INTO `table_1` (`id`, `name`, `text`)
SELECT
    NULL AS `id`,
    `title` AS `name`,
    CONCAT(`words`, `short_text`) AS `text`
FROM
    `table_2`

Соединение полей через разделитель.

INSERT INTO `table_1` (`id`, `name`, `text`)
SELECT
    NULL AS `id`,
    `title` AS `name`,
    CONCAT_WS(' ', `words`, `short_text`) AS `text`
FROM
    `table_2`

Подзапросы из других таблиц

INSERT INTO `table_1` (`id`, `name`, `text`)
SELECT
    NULL AS `id`,
    `title` AS `name`,
    (SELECT `full_text` FROM `table_3` WHERE `id` = `table_2`.`item_id`) AS `text`
FROM
    `table_2`

Объединение таблиц

LEFT JOIN

INSERT INTO `table_1` (`id`, `name`, `keywords`, `text`)
SELECT
    NULL AS `id`,
    `table_2`.`title` AS `name`,
    `table_2`.`words` AS `keywords`,
    `table_3`.`full_text` AS `text
FROM
    `table_2`
LEFT JOIN
    `table_3`
ON
    `table_2`.`id` = `table_3`.`item_id`

UNION

INSERT INTO `table_1` (`id`, `name`, `text`)
(
    SELECT
        NULL AS `id`,
        `title` AS `name`,
        `short_text` AS `text`
    FROM
        `table_2`
)
UNION
(
    SELECT
        NULL AS `id`,
        `title` AS `name`,
        `short_text` AS `text`
    FROM
        `table_3`
)
13 марта 2019
В MySQL есть несколько встроенных функций шифрования. Рассмотрим основные на примерах c использованием PHP PDO.
Например, на сайте статей есть поиск, он ищет ключевое слово по полям: название статьи, title и основной текст. SQL...