SQL-запрос для дублирования записей на основе оператора If - PullRequest
1 голос
/ 29 апреля 2010

Я пытаюсь написать запрос SQL, который будет дублировать записи в зависимости от поля в другой таблице. Я использую MySQL 5.

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

Каждому продукту с определенным атрибутом нужна ссылка на одно и то же несколько изображений, поэтому продукту потребуется строка для каждого изображения в таблице - база данных на самом деле не содержит изображение, только его имя файла. (изображения являются клипартом для выбора покупателя)

На основании этих записей ...

SELECT * FROM `wp_shopp_spec` WHERE name='Can Be Personalised' and content='Yes'

Я хочу сделать что-то подобное ..

Для каждой записи, которая соответствует этому запросу, скопируйте записи 5134 - 5139 из wp_shopp_asset, но измените идентификатор, чтобы он был уникальным, и задайте для ячейки в столбце «родитель» значение «product» из таблицы wp_shopp_spec. Это будет означать, что для каждой записи, соответствующей вышеприведенному запросу, будет создано 6 новых записей, все с тем же значением в «родительском», но с уникальными идентификаторами и каждым другим столбцом, скопированным из оригинала (т. Е. Записи 5134-5139)

Надеюсь, это достаточно ясно - любая помощь очень ценится.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2010
INSERT wp_shopp_asset
(parent, col1, col2, ...)
SELECT wp_shopp_spec.product, wp_shopp_asset.col1, wp_shopp_asset.col2, ...
FROM wp_shopp_spec
CROSS JOIN wp_shopp_asset
WHERE wp_shopp_spec.name='Can Be Personalised'
  AND wp_shopp_spec.content='Yes'
  AND wp_shopp_asset.id BETWEEN 5134 AND 5139
0 голосов
/ 26 мая 2015

Для людей, которые ищут такую ​​информацию, знайте, что таблица shopp_spec больше не используется. Все спецификации (подробности) хранятся в таблице shopp_meta.

0 голосов
/ 29 апреля 2010

Звучит так, как будто вам нужно перекрестное объединение со значениями активов, которые вы хотите. Так что-то вроде:

Select spec.parent, asset.id as uniqueid, ...
From`wp_shopp_spec` spec
    Cross Join  (
                Select id
                From `wp_shopp_asset`
                Where Id Between 5134 And 5139
                ) asset
Where name='Can Be Personalised' 
    And content='Yes'
...