2016-08-26 149 views
0

品牌打开新的打开购物车。我正在尝试做一些数据导出。打开购物车 - 获取产品选项的产品ID - sql

我需要的是每个产品选项的产品ID。这听起来不复杂,但我真的不知道如何打开车知道什么样的选择是什么产品。

例产品选项:

enter image description here

我已经附加了什么我谈论的图像。您可以看到在方括号中的产品选项是产品的ID后。但我无法弄清楚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

柜面任何人都需要做到这一点 - 我想通了最终。

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); 

大部分这是非常简单的。我使用一些喜欢的产品ID来获得产品选项。我在select中的子字符串中使用子字符串来获取方括号之间的所有内容。

这给了我们一个选项列表和它们被分配到

产品ID(我没有足够的代表为图像所以这里ASCII代替)

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

因此,例如产品1234有两个选项,他们的产品ID分别是223和224

如果有人发现这样做的更好方法,而不是从名称列中翻译产品ID,请让我知道,因为这感觉像一个黑客攻击。

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

恐怕不是。方括号内的产品ID不会添加到数据库中产品的名称中。这只是一个前端功能。但是,我实际上没有代码库来进行逆向工程。我希望熟悉OpenCart数据库架构的人。 – Frank