打开购物车 - 获取产品选项的产品ID - sql

时间:2016-08-26 13:58:12

标签: sql opencart product options

品牌打开新手推车。我试图做一些数据导出。

我需要的只是每个产品选项的产品ID。它听起来并不复杂,但老实说我不知道​​开放式购物车知道什么选择是什么产品。

示例产品选项:

enter image description here

我附上了我正在谈论的内容的图像。在方括号中的产品选项后,您可以看到产品的ID。但我无法弄清楚Open Cart如何将该选项与产品相关联。

最终目标是获取所有正在用作选项的product_id列表以及分配给它们的产品(仅限非必需品)

这样的事情:

WITH yt AS (SELECT * FROM your_table WHERE attribute=true)
SELECT t.* FROM yt t WHERE NOT EXISTS (SELECT 1 FROM yt WHERE id = t.reference_id)

如果product_option_value实际上包含该选项的product_id。如果我是傻瓜,请原谅我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,请告诉我,因为这感觉就像一个黑客。