2016-08-26 4 views
0

Бренд шпаргалка новый, чтобы открыть корзину. Я пытаюсь выполнить экспорт данных.Открыть корзину - Получить идентификатор продукта для продукта - sql

Все, что мне нужно, это идентификатор продукта для каждого продукта. Это не звучит сложно, но я честно не могу понять, как открытая тележка знает, какой вариант - какой продукт.

Пример вариант продукта:

enter image description here

Я приложил образ того, что я говорю. Вы можете видеть, что после того, как опция продукта в квадратных скобках - это идентификатор продукта. Но я просто не могу понять, как Open Cart связывает опцию с продуктом.

Конечной целью является, чтобы получить список всех product_ids, которые используются в качестве опции и какие продукты они назначены (не требуется только)

Так что-то вроде этого:

select pov.* 
from product_option_value pov 
where pov.option_id in (select option_id from product_option 
         where required = 0 and price > 0); 

Если product_option_value действительно имел product_id опции в нем. Простите меня, если я буду глуп.

ответ

0

Incase кто-то должен это сделать - я понял это в итоге.

SELECT pov.product_id, substring_index(substring_index(ovd.name, '[', -1),']', 1) as option_product_id, p.model 
FROM product_option_value pov 
LEFT JOIN option_value ov 
ON pov.option_value_id = ov.option_value_id 
LEFT JOIN option_value_description ovd 
ON ov.option_value_id = ovd.option_value_id 
LEFT JOIN product p 
ON p.product_id = pov.product_id 
WHERE ovd.name LIKE '%[%' 
AND ovd.name NOT LIKE '%FREE%' 
AND pov.option_id IN (SELECT option_id FROM product_option WHERE required = 0); 

Большая часть этого довольно проста. Я использую некоторые идеи только для получения параметров продукта с идентификаторами продуктов. Я использую подстроку внутри подстроки в элементе select, чтобы получить все между квадратными скобками.

Это дает нам список вариантов и идентификаторы продуктов они присвоенные

(я не хватает респ для изображения так что здесь вместо ASCII)

+------------+-------------------+-------+ 
| product_id | option_product_id | model | 
+------------+-------------------+-------+ 
|  1234 |    223 | mmss1 | 
|  1234 |    224 | mmss1 | 
|  1225 |    221 | mmss3 | 
|  1226 |    229 | mmss6 | 
+------------+-------------------+-------+ 

Так, например, продукт 1234 имеет два варианта: их идентификаторы продукта 223 и 224

Если кто-то найдет лучший способ сделать это, а не разрывать идентификаторы продуктов из колонки имен, пожалуйста, дайте мне знать, поскольку это похоже на взлома.

0

Попробуйте что-то вроде ниже .. Я предполагаю, что вы имеете таблицу продукта, и вы должны отобразить optionID против каждого продукта ..

SELECT pd.ProductName+'['+Convert(VARCHAR(50),po.option_id)+']',..... 
FROM product_option_value pov 
    JOIN product pd on pd pov.product_id=pd.product_id 
    JOIN product_option po on po.option_id=pov.option_id 
WHERE po.required = 0 and po.price > 0 
+0

Боюсь, что нет. Идентификатор продукта внутри квадратных скобок не добавляется к названию продукта в базе данных. Это просто интерфейс. Тем не менее, на самом деле у меня нет кода, чтобы перепроектировать его. Я надеюсь на кого-то, кто знаком с архитектурой DB OpenCart. – Frank