[MySQL] Filtrownie produktów po parametrach

PHP to skryptowy język wykonywany po stronie serwera. Forum przeznaczone na pytania dot. programowania obiektowego, wzorców projektowych itp.
Awatar użytkownika
arpik5891
Posty: 2
Rejestracja: 03 lis 2017, 16:06

[MySQL] Filtrownie produktów po parametrach

Post autor: arpik5891 » 03 lis 2017, 16:08

Witam
Potrzebuję pomocy przy następującym problemie:
Mam m.in tabele
products (products_id, .., ...)
products_to_products_extra_fields (products_id, products_extra_fields_id, products_extra_fields_value)

Chciałbym filtrować produkty po dodatkowych polach produktów i napisalem kika zapytań, to ktore powinno dzialać wygląda następująco:

Kod: Zaznacz cały

select 
p.products_id, p.manufacturers_id, p.products_price, pd.products_name
from
products_description pd, 
products_to_categories p2c,
products p left join  manufacturers  m on p.manufacturers_id = m.manufacturers_id   
where 
p.products_id in (SELECT p2pef.products_id 
                  FROM products_to_products_extra_fields p2pef
                  WHERE 
               // filtr nr 1
               (p2pef.products_extra_fields_id = '102' and p2pef.products_extra_fields_value = 'tak') 
               // filtr nr 2
               and (p2pef.products_extra_fields_id = '94' and p2pef.products_extra_fields_value = 'tak')
          // kolejne filtry ...
                   )

and p.products_status = '1'
and p.products_id = pd.products_id
and p.products_id = p2c.products_id
and pd.language_id = '4'
and p2c.categories_id = '26'
                        
group by p.products_id

Przy 1 filtrze zapytanie wyślwietla poprawnie wynik, jeśli jest więcej niż jeden filtr zapytanie zwraca 0 wyników.
Czy wie ktoś gdzie może leżeć przyczyna ?

Awatar użytkownika
arpik5891
Posty: 2
Rejestracja: 03 lis 2017, 16:06

Re: [MySQL] Filtrownie produktów po parametrach

Post autor: arpik5891 » 03 lis 2017, 18:16

Kod: Zaznacz cały

select 
p.products_id, pd.products_name
from
products_description pd, 
products_to_categories p2c,
products p
where 
EXISTS (SELECT p2pef.products_id 
                  FROM products_to_products_extra_fields p2pef
                  WHERE p2pef.products_extra_fields_id = '102' 
        			and p2pef.products_extra_fields_value = 'tak' 
       				and p.products_id = p2pef.products_id )
and 
EXISTS (SELECT p2pef.products_id 
                  FROM products_to_products_extra_fields p2pef
                  WHERE p2pef.products_extra_fields_id = '94' 
            		and p2pef.products_extra_fields_value = 'tak'
           			and p.products_id = p2pef.products_id )          
					
                 
and p.products_status = '1'
and p.products_id = pd.products_id
and p.products_id = p2c.products_id
and pd.language_id = '4'
and p2c.categories_id = '26'
                        
group by p.products_id
Taki kod wyświetla zawsze 1 rekord

ODPOWIEDZ