我正在运行以下mySQL查询,该查询为每个产品选项返回了不正确的价格。 (出于测试目的,每个选件都有不同的价格)。
如何为每个选项返回单个价格?
可以在这里看到数据库模式: http://www.webassist.com/tutorials/Free-eCommerce-MySQL-Database
SELECT ProductName AS productname, ProductCategoryID,
pov.OptionGroupName AS groupname,
povd.OptionName AS optionname,
pd.OptionPrice as price
FROM products p
LEFT JOIN productoptions pd ON (p.ProductID = pd.ProductID)
LEFT JOIN optiongroups pov ON (pd.OptionGroupID = pov.OptionGroupID)
LEFT JOIN options povd ON (pov.OptionGroupID = povd.OptionGroupID)
WHERE p.ProductID = 1
GROUP BY groupname, povd.OptionName
当前得到这个(注意价格):
+-------------+-------------------+-----------+------------+-------+
| ProductName | ProductCategoryID | GroupName | OptionName | Price |
+-------------+-------------------+-----------+------------+-------+
| Item1 | 1 | Color | Black | 2.00 |
| Item1 | 1 | Color | Red | 2.00 |
| Item1 | 1 | Color | Blue | 2.00 |
| Item1 | 1 | Size | Small | 5.00 |
| Item1 | 1 | Size | Medium | 5.00 |
+-------------+-------------------+-----------+------------+-------+
应该是这样(价格独特):
+-------------+-------------------+-----------+------------+-------+
| ProductName | ProductCategoryID | GroupName | OptionName | Price |
+-------------+-------------------+-----------+------------+-------+
| Item1 | 1 | Color | Black | 2.00 |
| Item1 | 1 | Color | Red | 3.00 |
| Item1 | 1 | Color | Blue | 4.00 |
| Item1 | 1 | Size | Small | 5.00 |
| Item1 | 1 | Size | Medium | 6.00 |
+-------------+-------------------+-----------+------------+-------+
以下是所有相关表的数据集(感谢指导,草莓!)。
产品表
+-----------+-------------+-------------------+
| ProductID | ProductName | ProductCategoryID |
+-----------+-------------+-------------------+
| 1 | T-Shirt1 | 1 |
+-----------+-------------+-------------------+
OptionGroups表
+---------------+-----------------+
| OptionGroupID | OptionGroupName |
+---------------+-----------------+
| 1 | color |
| 2 | size |
+---------------+-----------------+
ProductOptions表
+-----------------+-----------+----------+-------------+---------------+
| ProductOptionID | ProductID | OptionID | OptionPrice | OptionGroupID |
+-----------------+-----------+----------+-------------+---------------+
| 1 | 1 | 1 | 2.00 | 1 (color) |
| 2 | 1 | 2 | 3.00 | 1 (color) |
| 3 | 1 | 3 | 4.00 | 1 (color) |
| 4 | 1 | 4 | 5.00 | 2 (size) |
| 5 | 1 | 5 | 6.00 | 2 (size) |
+-----------------+-----------+----------+-------------+---------------+
选项表
+----------+---------------+------------+
| OptionID | OptionGroupID | OptionName |
+----------+---------------+------------+
| 1 | 1 | black |
| 2 | 1 | red |
| 3 | 1 | blue |
| 4 | 2 | Small |
| 5 | 2 | Small |
+----------+---------------+------------+
答案 0 :(得分:1)
我接受了您的查询scaisEdge,并对其进行了一些更改。我删除了最小/最大的东西,更改了对ProductOptions进行Left Join的方式,并更改了Where子句和Group By。似乎工作正常:
+-------------+-------------------+-----------+------------+-------+
| ProductName | ProductCategoryID | GroupName | OptionName | Price |
+-------------+-------------------+-----------+------------+-------+
| Item1 | 1 | Color | Black | 2.25 |
| Item1 | 1 | Color | Red | 3.25 |
| Item1 | 1 | Color | Blue | 4.25 |
| Item1 | 1 | Size | Small | 5.25 |
| Item1 | 1 | Size | Medium | 6.25 |
+-------------+-------------------+-----------+------------+-------+
此时的查询:
SELECT ProductName AS productname, ProductCategoryID,
pov.OptionGroupName AS groupname,
povd.OptionName AS optionname,
pd.OptionPrice AS price,
povd.OptionID AS optionid
FROM products p
LEFT JOIN productoptions pd ON (pd.OptionID = optionid)
LEFT JOIN optiongroups pov ON (pd.OptionGroupID = pov.OptionGroupID)
LEFT JOIN options povd ON (pov.OptionGroupID = povd.OptionGroupID)
WHERE p.ProductID = 1 and povd.OptionID = pd.OptionID
GROUP BY povd.OptionID,
groupname, povd.OptionName
非常感谢scaisEdge在此方面的帮助。
感谢草莓公司指导我如何在网站上格式化我的问题。
我真正相信,如果成员“否决”一个问题,则必须要求他们解释原因,以便我们新手能够学习而不会被简单降级,也不会从中学到任何东西。