W moim sklepie OpenCart mam wiele produktów z opcją dla koloru i wielkości. Czasami dzięki importowaniu z Excel opcja koloru była tylko jedna wartość np. biały.

Chcę zdać wszystkie opcje, w których optionValue ma tylko jeden wybór.

Informacje są przechowywane w dwóch tabelach: oc_product_option_value i oc_product_option.

Na przykład w OC_Product_option_Value wygląda tak:

product_id option_id
--------------------
66         18
66         18
66         17
67         18
67         18
67         17

Chcę więc usunąć jeden raz 66 z opcją 17 i jeden raz 67 z opcją 17.

Kiedy używam:

select * from oc_product_option_value group by product_id, option_id having count(*) = 1

Daje mi cały produkt_id z tylko jedną optionąValue i mogę go usunąć. Ale muszę też usunąć ten sam produkt_id z tabeli oct_product_option. Jak mogę wybrać wszystkie produkty w OC_Product_option, które mają tylko jedną opcjonalność w OC_Product_option_value.

Próbowałem tego, ale nie działa:

select * from oc_product_option
where option_id IN (select product_id from oc_product_option_value group by product_id, option_id having count(*) = 1)
1
Gerjan Krul 15 luty 2017, 19:29

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego za option_id:

   select oc.* from oc_product_option oc
INNER JOIN (
select option_id,product_id from oc_product_option_value group by product_id, option_id having count(*)=1
) t on t.option_id=oc.option_id AND t.product_id =oc.product_id 
0
Danilo Bustos 15 luty 2017, 18:43

Ok, przynosi mi trochę bliżej:

select * from oc_product_option where product_id in (select product_id from oc_product_option_value group by product_id, option_id having count(option_id) = 1)

To daje mi wszystkie poprawne produkt_id, ale pokaż mi produkt_id wszystkich opcji_id. Nie tylko te, które są singlem.

0
Gerjan Krul 15 luty 2017, 18:38