Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN I GROUP BY
markac
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


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.

Ten post edytował markac 10.12.2008, 14:28:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


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. ?>


Ten post edytował kefirek 10.12.2008, 15:14:35
Go to the top of the page
+Quote Post
prond
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


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;


Ten post edytował prond 11.12.2008, 09:29:39


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
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 - 20:04