我的查询如下所示:
SELECT SUM(ct_product_store_quantity.quantity) as quantity, `ct_product`.*
FROM `ct_product`
LEFT JOIN `ct_productLang` ON `ct_product`.`id` = `ct_productLang`.`product_id`
LEFT JOIN `ct_product_store_quantity` ON `ct_product`.`id` = `ct_product_store_quantity`.`product_id`
LEFT JOIN `ct_product_attribute` as cpa ON ct_product.id=cpa.product_id
WHERE cpa.attribute_id=10
AND cpa.attribute_value_id=36
AND cpa.attribute_id=2
AND cpa.attribute_value_id=5
AND cpa.attribute_id=7
AND cpa.attribute_value_id=31
AND cpa.attribute_id=9
AND cpa.attribute_value_id=28
AND cpa.attribute_id=8
AND cpa.attribute_value_id=25
GROUP BY `ct_product`.`id`
HAVING quantity > 0
ORDER BY `id` DESC
简单地说,每个 AND
条件评估 true
. 如果我一个接一个地执行就可以了。但是,当我试图像上面所说的那样执行它时,不会返回任何结果。我肯定我做得不对 AND
条件部分。这个 ct_product_attribute
表格:
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| product_id | int(11) | YES | MUL | NULL | |
| attribute_set_id | int(11) | YES | MUL | NULL | |
| attribute_id | int(11) | YES | MUL | NULL | |
| attribute_value_id | int(11) | YES | MUL | NULL | |
| value | varchar(255) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
如果需要的话,我会把其他的表贴出来。只是尽量不让邮件泛滥。谢谢您!
在中编辑 ct_product
我有这样的产品(举个例子):
id
1
2
3
在 ct_product_attribute
每个产品可以有多个atter.value属性对。有些对是相同的。(将只显示我需要的列)
id product_id attribute_id attribute_value_id
1 1 1 1
2 2 1 1
3 1 2 1
4 2 3 1
5 3 1 1
6 3 2 1
我从请求中得到的值是:
attribute_id=1
attribute_value_id=1
attribute_id=2
attribute_value_id=1
现在我只能用 id=1
. 如果我使用或它正在检索这两种产品 id=1
以及 id=2
. 不知道现在是否更清楚了。
3条答案
按热度按时间w1e3prcc1#
你可以试着用
(cpa.attribute_id,cpa.attribute_value_id) in ((10,36),(2,5),(7,31),(9,28),(8,25))
```SELECT SUM(ct_product_store_quantity.quantity) as quantity,
ct_product
.*FROM
ct_product
LEFT JOIN
ct_productLang
ONct_product
.id
=ct_productLang
.product_id
LEFT JOIN
ct_product_store_quantity
ONct_product
.id
=ct_product_store_quantity
.product_id
LEFT JOIN
ct_product_attribute
as cpa ON ct_product.id=cpa.product_idWHERE (cpa.attribute_id,cpa.attribute_value_id) in ((10,36),(2,5),(7,31),(9,28),(8,25)) and
ct_product
.id
=1GROUP BY
ct_product
.id
HAVING quantity > 0
ORDER BY
id
DESCvlf7wbxs2#
我很确定那些应该是手术室,因为你不可能同时拥有所有的身份证。考虑到这一点,您应该能够在中使用。
esbemjvw3#
我真的不知道你想完成什么,但你应该/可以使用where in,因为每个人都在评论中指出你正在寻找一个具有多个值的字段。。。
但是,关于和问题,你可以/应该使用
IN
,例如;