[英]mysql query on the same column filtered by 2 different values
我有一张产品表,我确定有一个产品 (ID= 18) 属于第 2 类,其标签名为“color”,值为“jeans”,名为“fabric”的标签值为“牛仔布”。
产品、产品标签、产品图片、产品选项是我试图以这种方式加入的不同相关表:
SELECT *, p.id as pid FROM prodotti_immagini pi
LEFT JOIN prodotti p ON pi.prodotto = p.sku
LEFT JOIN prodotti_opzioni po ON po.prodotto = p.id
LEFT JOIN prodotti_tags pt ON pt.prodotto = p.id
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
AND pt.tag = 'colore'
AND pt.val_it LIKE '%jeans%'
AND pt.tag = 'tessuto'
AND pt.val_it LIKE '%denim%'
GROUP BY p.id
我得到的是一个空的记录集,而不是得到产品 id=18。 但是如果我删除标签上的一个子句,它就可以完美地工作。 这是有效的(我只用面料或意大利语中的“tessuto”过滤)
SELECT *, p.id as pid FROM prodotti_immagini pi
LEFT JOIN prodotti p ON pi.prodotto = p.sku
LEFT JOIN prodotti_opzioni po ON po.prodotto = p.id
LEFT JOIN prodotti_tags pt ON pt.prodotto = p.id
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
AND pt.tag = 'tessuto'
AND pt.val_it LIKE '%denim%'
GROUP BY p.id
在同一列上进行 2 个检查有什么问题? 它背后的逻辑是什么? 谢谢
为了在列对之间具有优先级,请尝试以下操作:
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
AND (
( pt.tag = 'colore' AND pt.val_it LIKE '%jeans%' )
OR ( pt.tag = 'tessuto' AND pt.val_it LIKE '%denim%' )
)
GROUP BY p.id
编辑:其他方式,使用连接:
SELECT *, p.id as pid FROM prodotti_immagini pi
LEFT JOIN prodotti p ON pi.prodotto = p.sku
LEFT JOIN prodotti_opzioni po ON po.prodotto = p.id
LEFT JOIN prodotti_tags pt ON
pt.prodotto = p.id
AND ( pt.tag = 'colore'
OR pt.val_it LIKE '%jeans%'
OR pt.tag = 'tessuto'
OR pt.val_it LIKE '%denim%' )
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
GROUP BY p.id
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
AND pt.tag = 'colore'
AND pt.val_it LIKE '%jeans%'
AND pt.tag = 'tessuto'
AND pt.val_it LIKE '%denim%'
GROUP BY p.id
通过此查询条件,您正在获取值为pt.tag = 'colore' AND pt.tag = 'tessuto'
,这是自相矛盾的。
这就是空集的原因。
那么一行怎么可以有两个不同的( tessuto & colore
)值,它只能包含一个( tessuto OR colore
)
所以你应该看起来像这样(见pt.tag
& pt.val_it
OR
)
WHERE pi.principale = 1 AND p.disponibile=1
AND categoria = 2
AND (pt.tag = 'tessuto' OR pt.tag = 'colore' )
AND (pt.val_it LIKE '%denim%' OR pt.val_it LIKE '%jeans%')
GROUP BY p.id
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.