[MySql] Как скопировать строку из одной таблицы в другую и заполнить дополнительные столбцы? - PullRequest
0 голосов
/ 06 февраля 2019

Итак, я хочу сжать этот запрос, и я не уверен, как это сделать.

Прямо сейчас я использую

$move_to_sold = 
    "INSERT INTO sold_inv_item(
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    )
    SELECT
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    FROM inv_item
    WHERE `sku` = '$sku'";

$add_date_and_name = 
    "UPDATE sold_inv_item 
    SET `purchase_date` = '$date', `customer_name` = '$name' 
    WHERE `sku` = '$sku'";

, что я пытаюсь сделать, это скопировать строку из 1 таблицы в другую, а затем добавить дополнительные данные в 2 дополнительных столбца из данных $ _POST,

Я пробовал что-то вроде

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img` FROM inv_item WHERE inv_item.sku = 'pepsi-2-tone'), '2019-02-14','betty Girl');

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

Наконец, это работает, но я бы предпочел сделать что-то вроде промежуточного решения, если это возможно.

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `designer` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `price` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `metal_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_weight` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_desc` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_img` from inv_item where inv_item.sku = 'pepsi-2-tone'),'2019-02-14','betty Girl');

Итак, наконец, вопрос в том, как наиболее эффективно использовать код и производительность для копирования строки из одной таблицы.в другой и заполните дополнительные столбцы.Там есть несколько похожих, но ни один, который я не могу найти, покрывает более 1-2 копируемых столбцов.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете использовать синтаксис INSERT ... SELECT, например:

INSERT INTO sold_inv_item (
    `sku`,
    `designer`,
    `type`,
    `price`,
    `metal_type`,
    `stone_type`,
    `stone_weight`,
    `item_desc`,
    `item_img`, 
    `purchase_date`, 
    `customer_name`
)
SELECT 
    `sku`,
    `designer`,
     `type`,
     `price`,
     `metal_type`,
     `stone_type`,
     `stone_weight`,
     `item_desc`,
     `item_img`,
     :date,
     :name
FROM inv_item
WHERE `sku` = :sku

PS: когда дело доходит до использования POST ed параметров в SQL-запросах, любой на SO настоятельно рекомендует использовать подготовленные операторы и параметризованные запросы , чтобы защитить ваш код от внедрения SQL и сделать ваши запросы более эффективными, удобочитаемыми и обслуживаемыми.Я изменил запрос, чтобы использовать именованные параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...