Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Left Join - problem
Forum PHP.pl > Forum > Bazy danych > MySQL
Lardux
witam,

mam takie tabele

produkty (
p_id - primary key,
p_nazwa
p_cena
)


magazyn
(
m_id - primary key
m_ulica
m_kod
m_miasto
)

stan
(
stan_id - primary key
stan_m_id - foregin key powiazany z magazyn
stan_p_id - foregin key powiazany z produkty
stan_ilosc
)

chce wyswietlic wszystkie produkty ktore znajduja sie w magazynie o m_id=1 ale zwykly inner join mi nie starczy, bo ja chce miec WSZYSTKIE produkty a wartosci stanu magazynu z tabeli stan, a tam gdzie nie ma produktow na stanie, to chcialbym widziec 0, innymi slowy interesuje mnie cos takiego

m_id-----p_id-----stan_ilosc
--------------------------------------
1------------1------------10
1------------2------------0
1------------3------------7
1------------4------------0

normany inner join da mi

m_id-----p_id-----stan_ilosc
--------------------------------------
1------------1------------10
1------------3------------7

jesli zrobie left join'a to da mi wszystkie produkty, ale gdy dodam where m_id = 1 to znowu mam to samo co z inner joina..

any idea?
Draugfor
Moze tak?
  1. SELECT m_id, p_id, stan_ilosc
  2. FROM produkty, magazyn, stan
  3. WHERE stan.stan_m_id=magazyn.m_id AND stan.stan_p_id=produkty.p_id AND magazyn.m_id=1;

Pozdrawiam.
amwoan
Jeśli dobrze zrozumiałem, to to powinno dać pożądany rezultat:
  1. SELECT magazyn.m_id, produkty.p_id, IF(stan.stan_ilosc, stan.stan_ilosc, 0) AS stan_ilosc
  2. FROM produkty INNER JOIN stan ON stan.stan_p_id=produkty.p_id RIGHT JOIN magazyn ON stan.stan_m_id=magazyn.m_id WHERE magazyn.m_id=1

Można oczywiście przestawić tabele i dać LEFT JOIN zamiast RIGHT, ale już mi się nie chciało. tongue.gif
Lardux
pierwsza odpowiedz to zwykly inner join - nie dziala

druga odpowiedz daje same zera - nie dziala...

potrzebuje wszystkie produkty i ich stan, jesli jest, jesli nie ma to null, przyklad, mamy 3 produkty, jeden magazyn, na stanie jest jeden produkt, sql daje nam w wyniku 3 rekordy, z ktorych jeden posiada wartosc stan = np 17 (bo tyle akurat jest go na magazynie) a reszta rekordow posiada pole stan = NULL, jesli nie damy warunku where magazyn id = jakis numerek to wszystko dziala za pomoca zwyklego left joina, lecz gdy dochodzi warunek magazyny, nawet jak dam magazyn id = 1 or magazyn id is null - to nie dziala...

moze ktos ma jeszcze jakis pomysl??


edit, problem rozwiazany...

SELECT * FROM produkty Left JOIN stan ON stan.stan_p_id=produkty.p_id and stan.stan_m_id=17 or stan.stan_m_id is null
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.