0

製品と属性の 2 つのテーブルがあります。各製品は多くの属性を持つことができます!

複数の属性を持つ製品を見つけなければならないときに問題が始まります。

select * from `products` 
left join `pattributes` on `pattributes`.`products_id` = `products`.`id` 
where `products`.`status` = 1 
AND `products`.`sold` = 0 
AND `products`.`deleted` = 0 
AND `products`.`categories_id` = 30 
AND `pattributes`.`attributes_id` = 5 
AND `pattributes`.`values_id` = 10 
AND `pattributes`.`attributes_id` = 4 
AND `pattributes`.`values_id` = 15 
group by `products`.`id` 
order by `products`.`top` desc, 
`products`.`id` desc

したがって、2 つ以上の属性を探している場合、0 行が返されます。しかし、1つの属性を探すとうまくいきます。

私は mysql の第一人者ではありません。左結合で行う必要があるかどうかはわかりません。多分誰かがそれに対する最善の解決策を知っていますか?

SQL Fiddle を追加しました。

4

2 に答える 2

0

複数の属性に使用IN()し、複数の場合と同じvalues_id

select * from `products` 
left join `pattributes` on `pattributes`.`products_id` = `products`.`id` 
where `products`.`status` = 1 
AND `products`.`sold` = 0 
AND `products`.`deleted` = 0 
AND `products`.`categories_id` = 30 
AND `pattributes`.`attributes_id` IN(5 ,4)// if type is varchar then IN('5' ,'4')
AND `pattributes`.`values_id` IN( 10,15 )
group by `products`.`id` 
order by `products`.`top` desc, 
`products`.`id` desc
于 2013-09-23T12:59:40.830 に答える