ÜRÜN FİLTRELERİNİ UYGULAMA
Ürünlere ait özellikleri filtrelemek istiyorum.
Veritabanı yapım şu şekilde;
filters
id | type | name | title |
---|---|---|---|
1 | 1 | Erkek Pantolon Renk | Renk |
2 | 2 | Erkek Pantolon Beden | Beden |
filter_option
id | filter_id | value |
---|---|---|
1 | 1 | Kırmmızı |
2 | 1 | Siyah |
3 | 2 | 30 |
4 | 2 | 31 |
category_filters
id | category_id | filter_id |
---|---|---|
1 | 2 | 1 |
2 | 2 | 2 |
product_filters
id | filter_id | filter_option_id | product_id |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 1 | 2 | 1 |
3 | 2 | 1 | 1 |
Örnek olarak veri tabanı yapım bu şekilde.
select products.* from `product_filters`
inner join `products` on `products`.`id` = `product_filters`.`product_id`
where
`product_filters`.`filter_option_id` in ('4')
OR
`product_filters`.`filter_option_id` in ('10') OR
`product_filters`.`filter_option_id` in ('20') OR
(`products`.`category_id` = 2 or `products`.`parent_category_id` = 2)
WHERE
(products.category_id = 2 or products.parent_category_id = 1)
Örnek olarak şu şekilde bir sql sorgusu yazdığım zaman bana veriler geliyor fakat or kullandığım için ürünler tekrara düşüyor.
Or yerine and kullanırsam hem filter_option_id si 4 , 10 ve 20 olan her hangi bir veri olmadığı için ürün bulunamıyor.
Bir şekilde product_id ve filter_id ye göre filter_option columnlarını tek colum haline getimem gerekli.
Bunu nasıl yapabilirim? Veya başka nasıl bir çözüm bulabilirim ?
@tayfunerbilen
product_filters tablosunda filter_option_id columunu doğruda ilişkilendirmek yerine. filter_options olarak tutum 'x$valx' şekilde filter optionları kaydettim ve tek satıra düşürüdüm.
like sorgusu ile de ürünlere ulaşmayı başardım. Böyle yapmak istemiyordum ama cevap gelmeyince mecbur böyle yaptık.Kullanmak isteyen var örne sql sorgusu.
select count(*) as aggregate from `product_filters`
inner join `products` on `products`.`id` = `product_filters`.`product_id`
where (`filter_options` LIKE '%x34x%' and `filter_options` LIKE '%x32x%' and
`filter_options` LIKE '%x33x%' and `filter_options` LIKE '%x31x%') and (`filter_options` LIKE '%x26x%'
and `filter_options` LIKE '%x27x%' and `filter_options` LIKE '%x28x%')
and (`products`.`category_id` = 1 or `products`.`parent_category_id` = 1)