Поэтому я хочу сжать этот запрос, и я не уверен, как это сделать.
Щас пользуюсь
$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'";
я пытаюсь скопировать строку из одной таблицы в другую, а затем добавить дополнительные данные в 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 копируемых столбцов.
Вы можете использовать синтаксис 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-кода и сделать ваши запросы более эффективными, читаемыми и обслуживаемыми. Я изменил запрос, чтобы использовать именованные параметры.
Просто добавьте его в ваш выбор, например
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', '2019-02-14', 'betty Girl'
FROM inv_item WHERE inv_item.sku = 'pepsi-2-tone') );