Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Left Join - problem
Lardux
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.05.2005

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Lardux 19.05.2005, 16:40:23
Go to the top of the page
+Quote Post
Draugfor
post
Post #2





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 13.07.2003
Skąd: Torun/Poznan

Ostrzeżenie: (0%)
-----


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.


--------------------
On the day I was born, the nurses all gathered 'round
And they gazed in wide wonder, at the joy they had found
Go to the top of the page
+Quote Post
amwoan
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.05.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował amwoan 19.05.2005, 19:10:03


--------------------
Pozdrawiam.
BYKOM-STOP!
Go to the top of the page
+Quote Post
Lardux
post
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.05.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował Lardux 2.06.2005, 12:20:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:30