Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN obsługa braku rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
pastan
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
nospor
Zgadza sie, masz uzyc LEFT JOIN. Z czym konkretnie masz problem?
bobek358
Left JOIN tabeli a do tabeli B i tam gdzie nie masz połączenia A -> B będziesz miał w B.amount NULL
pastan
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
Tuminure
Do sprawdzania czy wartość jest nullem użyj "IS NULL" zamiast "= NULL".
pastan
@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
bobek358
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.

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.