Php 选择产品变体SQL
这是我的查询,没有变量选项Php 选择产品变体SQL,php,sql,Php,Sql,这是我的查询,没有变量选项 SELECT p.*, pd.`name` AS `product_name` FROM `product` AS `p` LEFT JOIN `product_description` AS `pd` ON p.`id` = pd.`product_id` LEFT JOIN `product_to_variant` AS `pv` ON p.`id` = pv.`product_id` WHERE p.`status` = 0 GROUP BY p.`id`
SELECT p.*, pd.`name` AS `product_name`
FROM `product` AS `p`
LEFT JOIN `product_description` AS `pd` ON p.`id` = pd.`product_id`
LEFT JOIN `product_to_variant` AS `pv` ON p.`id` = pv.`product_id`
WHERE p.`status` = 0
GROUP BY p.`id`
ORDER BY p.`id` DESC;
SQLFiddle:
下面的查询有不同的选项,但不起作用
SELECT p.*, pd.`name` AS `product_name`
FROM `product` AS `p`
LEFT JOIN `product_description` AS `pd` ON p.`id` = pd.`product_id`
LEFT JOIN `product_to_variant` AS `pv` ON p.`id` = pv.`product_id`
WHERE p.`status` = 0
AND (pv.`feature_id` = 2 AND pv.`variant_id` = 6)
AND (pv.`feature_id` = 3 AND pv.`variant_id` = 11)
GROUP BY p.`id`
ORDER BY p.`id` DESC;
我也试图查询,但没有输出
SELECT pv.* FROM `product_to_variant` AS `pv`
WHERE (pv.`feature_id` = 2 AND pv.`variant_id` = 2)
AND (pv.`feature_id` = 3 AND pv.`variant_id` = 11)
您对如何接收产品还有其他想法吗:14、15按特定变体编号6和11这里有一种方法可以满足您的需求:
SELECT p.*, pd.name AS product_name
FROM product p LEFT JOIN
product_description pd
ON p.id = pd.product_id JOIN
product_to_variant pv
ON p.id = pv.product_id
WHERE p.status = 0 AND
((pv.feature_id = 2 AND pv.variant_id = 6) OR
(pv.feature_id = 3 AND pv.variant_id = 11)
)
GROUP BY p.id
HAVING COUNT(DISTINCT feature_id) = 2
ORDER BY p.id DESC;
注:
没有行可以满足您的原始条件。因为一列不能同时有两个值。因此是OR而不是AND。
HAVING子句检查两个值是否匹配。
不需要对pv进行左连接,因为您在WHERE子句中检查该表中的值-必须有匹配项。
pa的左连接可能也没有必要。
到处使用反勾号只会使查询更难写和读。
也许是这样:
SELECT pv.* FROM `product_to_variant` AS `pv`
WHERE (pv.`feature_id` = 2 AND pv.`variant_id` = 2)
OR (pv.`feature_id` = 3 AND pv.`variant_id` = 11)
与AND不同,AND表示在结果中同时需要特征id和变体id,而使用OR,因为它同时需要特征id和变体id。这些分组依据无效。将在较新的MySQL版本上引发错误,除非处于兼容模式。常规GROUP BY规则说:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数!是的,但是我需要ANDprntscr.com/ect2ohThanks,但是如果两个产品具有相同的功能,那么有一个问题其他任何想法都可以通过变体_id 6和11接收产品14、15@约翰南德拉。这是个什么问题?你知道COUNTDISTINCT是做什么的吗?我想我知道了。我稍后会留下反馈。谢谢你的回答