Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> LEFT JOIN obsługa braku rekordu
pastan
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 3
Dołączył: 25.03.2009

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


Hej!
Mam pytanie, głowię się już nad tym od dłuższego czasu ale nic sensownego nie mogę wymyśleć.
Odnośnie pytania to zacznę może od przedstawienia tabelek. A więc mam 2 tabele

tabela A - rekordy:
id email
1 cos@wp.pl
2 cos3@wp.pl
3 cos4@wp.pl
4 cos5@wp.pl

tabela B - rekordy:
id a_id amount
1 1 100
2 3 300


I teraz pytanie brzmi. Jak za pomocą jednego zapytania pobrać rekordy z Tabeli A, dopasować do nich rekordy z Tabeli B (id = a_id), posorotwać po kolumnie B.amount ale gdy nie ma połączeń to wyświetlić i tak rekordy z A.

Czyli powinienem otrzymać takie coś:
id email amount
1 cos@wp.pl 100
2 cos3@wp.pl 0
3 cos4@wp.pl 300
4 cos5@pw.pl 0


Z góry dzięki za pomoc! smile.gif
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zgadza sie, masz uzyc LEFT JOIN. Z czym konkretnie masz problem?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bobek358
post
Post #3





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Left JOIN tabeli a do tabeli B i tam gdzie nie masz połączenia A -> B będziesz miał w B.amount NULL
Go to the top of the page
+Quote Post
pastan
post
Post #4





Grupa: Zarejestrowani
Postów: 19
Pomógł: 3
Dołączył: 25.03.2009

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


Wiem, że tutaj potrzebny jest LEFT JOIN. Próbowałem już to zrobić sam tylko porblemem u mnie jest to, że gdy w tabeli B nie ma pasującego rekordu to nie wyświetla rekordu tabeli A. I nie mam aktualnie pojęcia jak sobie z tym poradzić. Poniżej wrzucam kod, który próbowałem zrobić:

  1. SELECT `system_users`.`id`, `system_users`.`email`, `system_users`.`avatar`,SUM(`finance_incomes_partners`.`amount`) AS amount FROM `system_users` LEFT JOIN `finance_incomes_partners` ON `finance_incomes_partners`.`partner_id` = `system_users`.`id` WHERE " . $partner_lvl . "=" . $user_id . " AND `finance_incomes_partners`.`user_id` = " . $user_id . " OR `finance_incomes_partners`.`user_id` = NULL ORDER BY `finance_incomes_partners`.`amount` ASC LIMIT 0,5
Go to the top of the page
+Quote Post
Tuminure
post
Post #5





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


Do sprawdzania czy wartość jest nullem użyj "IS NULL" zamiast "= NULL".
Go to the top of the page
+Quote Post
pastan
post
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 3
Dołączył: 25.03.2009

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


@Tuminure: Nie wiem jakim cudem zapomniałem o tym IS. arrowheadsmiley.png Ale mimo wszystko to i tak nie rozwiązauje mojego problemu. smile.gif
Go to the top of the page
+Quote Post
bobek358
post
Post #7





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


A czemu sprawdzasz warunek po stronie tabeli przyłączonej:

  1. AND `finance_incomes_partners`.`user_id` = " . $user_id . "


Musisz sprawdzić po lewej stronie czyli w tabeli

  1. AND `system_users`.`id` = " . $user_id . "


Ponieważ w pierwszym wypadku jak nie ma połączenia to wa wartość IS NULL a nie ID usera.

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: 21.08.2025 - 22:24