Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: złączenia
Forum PHP.pl > Forum > Bazy danych > MySQL
umatik
mam 2 tabele:

1 opisuje szkolenia
2 zawiera osoby zapisane na poszczegolne szkolenia.....

bardzo chcialem za pomoca jednego zapytania otrzymac tabele w ktorej byla by nazwa szkolenia i ilosc osob zapisanych na nie ....

wiem ze takie cos mozna zrobic za pomoca słączeń jednak nie zabardzo rozumie idei zlaczenia tabel. Kupilem sobie ksiazke do MySql "core mysql" w ktorej jest opisany caly system zadawania pytan do bazy jednak zlaczenia table sa dla mni nie dokonca jasne.

czy ktos mi moze wyjanic idee złączeń na podstawie mojego przykladu?
SongoQ
Temat ten przewija sie czesto przez to forum.

  1. SELECT t1.szkolenie COUNT(t2.id)
  2. FROM t1, t2 WHERE t1.id = t2.idt2 GROUP BY t1.szkolenie
umatik
heh niestety nie przewidzialem sytuacji kiedy nie ma zapisanych jeszcze uczestnikow szkolenia ... w takim przypadku powyzsze zapytanie pominie to szkolenie ....
spenalzo
Powinno być OK:
  1. SELECT t1.szkolenie, COUNT(t2.id) AS ilosc
  2. FROM t1 LEFT JOIN t2 ON (t1.id = t2.idt2) GROUP BY t1.szkolenie
umatik
bardzo spoko ;] teraz jest dobrze

a czy bylbys mi w stanie szybko wytlumaczic LEFT JOIN nie zabardzo jasno jest to opisane w mojej ksiazce....
SongoQ
LEFT JOIN - zlaczenie lewostronne, w przypadku kiedy dolanczas tablice z rekordami i niestety nie ma dopasowania w miejsce niedopasowanych rekorodow wstawiane sa NULLe
Hacker
Mam problem ze złączeniami.
Chce zrobić złączenie na jednej i tej samej tabeli.(Piszę sobie forum)
Mam tabelę Forums w której są różne kategorie i mam tak klucz główny id i pole cid, w którym znajduje się id innej kategori lub 0 gdy nie ma kategori wyższej. Chce w jednym zapytaniu uzyskać te kategorie które nie są podkategoriami innych kategori (cid=0) i do każdej z nich jej podkategorie. Nie mam pojęcia jak to zrobić pytałem się nawet google i mi nie pomógł (Pewnie nie umiem formułować zapytania albo dlatego że szukam polskich materiałów). HELP sadsmiley02.gif

EDIT:

Mam rozwiązanie:
  1. SELECT *
  2. FROM forums AS fo LEFT JOIN forums AS f ON fo.id = f.cid WHERE fo.cid = 0 LIMIT 0, 30
cool.gif

EDIT 2:

Zastanawiam się czy nie dało by się zrobić tak aby fo.id i fo.name było tylko w pierszym wierszu a w następnych tam gdzie inne mają te same f.cid=fo.id miało wartość null. Da się zrobić jakoś tak aby nie wypisywać po koleji wszystkich kolumn z f i nadawać im alias (f.name as subname...) tylko nadać im przedrostek naprzykład sub i żeby tworzyło (f.id as subid)
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.