Maciej
W.
a czy ty masz swój
ręcznik?...
Temat: Problem z warunkami łączenia
Witam.Mam problem z zapytaniem. Niestety muszę wynik otrzymać TYLKO jednym zapytaniem gdyż nie mogę ingerować w kod, tylko zapytanie, nie mam do dyspozycji funkcji ani procedur więc zostaje pojedyncze zapytanie.
Mam go obecnie w takiej formie:
select distinct m.manufacturers_id,
p.products_id,
p.products_image,
p.products_model,
pd.products_name,
pd.products_description,
pd.products_short,
p.products_price,
p.products_tax_class_id,
IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price,
IF(s.status, s.specials_new_products_price, p.products_price) as final_price,
[b]IFNULL((SELECT products_id FROM products_to_products_extra_fields2[/b] WHERE products_to_products_extra_fields2.products_id = 5703),0) AS field2
from
(((((products p) left join products_to_products_extra_fields p2pef on p.products_id=p2pef.products_id)
left join manufacturers m on m.manufacturers_id=p.manufacturers_id)
left join specials s on p.products_id = s.products_id)
left join products_attributes pa on p.products_id = pa.products_id) ,
products_description pd,
categories c,
products_to_categories p2c,
[b]products_extra_fields pef[/b]
[b]inner join products_to_products_extra_fields2 p2e on p2e.products_extra_fields_id = pef.products_extra_fields_id[/b]
where
products_extra_fields_status = 1 and
p2e.products_extra_fields_value<>'' and
p2e.products_id = pd.products_id and
p.products_status = '1' and
c.categories_status = '1' and
p.products_id = pd.products_id and
pd.language_id = '1' and
p.products_id = p2c.products_id and
p2c.categories_id = c.categories_id and (
(pd.products_name like '%olily%'
or pa.options_code like '%olily%'
or pa.options_code like '%ylilo%'
or p.products_model like '%olily%'
or p.products_model like '%ylilo%'
[b]or p2e.products_extra_fields_value like '%olily%' [/b]
or m.manufacturers_name like '%olily%'
or pd.products_description like '%olily%'
OR p.products_id = 5703) )
order by pd.products_name
Elementy które są istotne:
IFNULL((SELECT products_id FROM products_to_products_extra_fields2[/b] WHERE products_to_products_extra_fields2.products_id = 5703),0) AS field2
or p2e.products_extra_fields_value like '%olily%' -> to jest w where
a to w FROM
products_extra_fields pef
inner join products_to_products_extra_fields2 p2e on p2e.products_extra_fields_id = pef.products_extra_fields_id
I teraz o co chodzi - jeśli zmienna którą tworzę sobie warunkiem na górze field2 będzie miała zero zapytanie powinno pominąć dołączanie tablic p2e oraz pef i wszystkiego co z nimi związane.
Próbowałem IF (warunek,inner join...)
Próbowałem IF(warunek then inner join...)
kombinowałem na różne sposoby aby to zapisać i nic nie przychodzi mi do głowy, wujek google także mi nie pomógł a spędziłem ponad godzinę aby coś odnaleźć.
Nie jestem jakimś wymiataczem jeśli chodzi o SQL no i tutaj póki co leżę.
Czy możecie mi powiedzieć czy to jest wykonalne, oraz nakierować jak to powinienem zapisać. Nie oczekuję gotowego rozwiązania, wystarczy wskazówka.
z góry dzięki za odpMaciej Wróbel edytował(a) ten post dnia 03.02.12 o godzinie 12:29