Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN I GROUP BY
Forum PHP.pl > Forum > Bazy danych > MySQL
markac
Witam. Mam trzy tabele: A, B i C smile.gif Atrybuty nie są istotne, oprócz jednego. Tabela C zawiera klucz obcy tabeli B a tabela B klucz obcy tabeli A. Jednym słowem A zawiera wiele B, a B zawiera wiele C smile.gif
Ok, jednak to zapisze heh:

Tabela A:
+----+
| id |
+----+

Tabela B:
+----+------+
| id | a_id |
+----+------+

Tabela C:
+----+------+
| id | b_id |
+----+------+


Problem polega na tym, jak wyświetlić zawartość tabeli A z informacją o ilości rekordów w tabeli B i ilości rekordów w tabeli C... (jedno zapytanie).
W tej chwili mam tylko wyświetlanie ilości rekordów z tabeli B:

  1. SELECT f.name, COUNT(t.id) AS topics FROM forum_forums f LEFT JOIN forum_topics t ON f.id = t.forum_id GROUP BY f.id


Z góry dzięki za ew. wskazówki.
kefirek
Spróbuj coś w ten spób
  1. <?php
  2. $wynik = mysql_query("SELECT a.*, (SELECT COUNT(id) FROM B b WHERE (b.a_id = a.id)) AS ileb,  
  3. (SELECT COUNT(id) FROM C c WHERE (c.b_id = b.id)) AS ilec
  4. FROM A GROUP BY id")
  5. ?>
prond
Można to zrobić nieco optymlaniej i czytelniej:
  1. SELECT a.id, count(DISTINCT b.id), count(DISTINCT c.id)
  2. FROM a LEFT JOIN b ON (a.id = b.a_id) LEFT JOIN b (b.id = c.b_id)
  3. GROUP BY a.id;
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.