从SQL查询获取产品
我目前正在开发一个专有的购物车系统,在以正确的价格购买产品时遇到了一些问题 我的表结构基本如下: 产品表:仅表示相关列从SQL查询获取产品,sql,mysql,Sql,Mysql,我目前正在开发一个专有的购物车系统,在以正确的价格购买产品时遇到了一些问题 我的表结构基本如下: 产品表:仅表示相关列 ---------------------------------------------------- productid | product | descr | disporder| list_price| ---------------------------------------------------- 1 name desc
----------------------------------------------------
productid | product | descr | disporder| list_price|
----------------------------------------------------
1 name desc 1 0.00
2 name desc 4 0.00
3 name desc 2 2.45
定价表:
变量表:
因此,每种产品都可以有——而且在大多数情况下确实有——多个变体。到目前为止,我已设法创建的当前SQL查询是:
SELECT
products.productid, product, descr, p.price, i.image_path
FROM
products
LEFT JOIN
pricing AS p
ON
p.variantid = (SELECT variantid FROM variants
WHERE productid = products.productid LIMIT 1)
LEFT JOIN
images_T AS i
ON
i.id = products.productid
GROUP BY
products.productid
ORDER BY
products.disporder
然而,当产品没有变体时,我的问题就出现了。如果产品没有与之关联的变体,则价格将位于产品表的列表价格列中。我将如何进行检查,以确定产品是否确实有变体。如果没有,它应该有效地绕过variants表,从products表中的list_price获取定价。最简单的方法是在SELECT子句中使用CASE,如下所示:
SELECT
products.productid, product, descr,
CASE
WHEN p.price IS NULL
THEN products.list_price
ELSE p.price
END AS price,
i.image_path
[...]
由于您将加入定价/变体,因此对于没有变体的产品,p.price应该可靠地为空
希望这就是您绕过变量表的意思: 最简单的方法是在SELECT子句中使用大小写,如下所示:
SELECT
products.productid, product, descr,
CASE
WHEN p.price IS NULL
THEN products.list_price
ELSE p.price
END AS price,
i.image_path
[...]
由于您将加入定价/变体,因此对于没有变体的产品,p.price应该可靠地为空
希望这就是您绕过变量表的意思: 您可以使用variants表进行完全联接,该表将只提供具有变体的产品,然后在不存在varian的情况下,将其与producs和pricing的联接进行联合,使用和不存在varian,从p.productid=v.productid和p.variantid=v.variantid的变体中选择1
否则,请使用定价用例。price您可以使用variants表进行完全联接,该表将只提供具有变量的产品,然后将其与不存在varianan using且不存在varianan的producs和pricing联接,从p.productid=v.productid和p.variantid=v.variantid的变量中选择1
否则,请使用定价用例。价格是,用例是一个选项,或者:
只需将两个价格相加,当第一个为空时,将选择另一个。是,大小写是一个选项,或者: 只需将两个价格相加,当第一个为空时,将选择另一个
SELECT
products.productid, product, descr,
CASE
WHEN p.price IS NULL
THEN products.list_price
ELSE p.price
END AS price,
i.image_path
[...]
SELECT
products.productid, product, descr,
COALESCE(products.list_price, p.price) AS price,
i.image_path
...