Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Count z kilku tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Siner
Chcę zliczyć ilość wystąpień rekordów z 3 różnych tabel. Przykład - zliczyć ile użytkownik ma komentarzy, głosów, serwisów. Co mi przyszło do głowy od razu to.
  1. SELECT users.id, COUNT( comments.id ) AS comments_count, COUNT( votes.id ) AS votes_count, COUNT( services.id ) AS service_count
  2. FROM users, comments, votes, services
  3. WHERE users.id =1 AND comments.user_id = users.id AND votes.user_id = users.id AND services.author_id = users.id
  4. GROUP BY users.id

Ale w każdym z tych 3 wierszy z count mam jedną liczbę i to nie koniecznie jakąś konkretną. Macie jakieś sposoby na rozwiązanie togo problemu?
sowiq
  1. SELECT COUNT(c.id) AS ilosc_komentarzy,
  2. COUNT(v.id) AS ilosc_glosowan
  3. FROM users u
  4. LEFT JOIN comments c ON (c.user_id = u.id)
  5. LEFT JOIN votes v ON (v.user_id = u.id)
  6. GROUP BY u.id

Ja bym próbował w ten sposób

[edit]
powyższy sposób jest błędny.
phpion
Masz 2 wyjścia.
1. Podzapytania.
2. UNION.
sowiq
~phpion ma rację. Moje zapytanie nie zadziała prawidłowo.
kefirek
Zobacz tak powinno dzialac
  1. SELECT
  2. u.id,
  3. (SELECT COUNT( c.id ) FROM comments c WHERE (u.id=c.user_id)) AS komentarzy,
  4. (SELECT COUNT( v.id ) FROM votes v WHERE (u.id=v.user_id)) AS votes,
  5. (SELECT COUNT( s.id ) FROM services s WHERE (u.id=s.author_id)) AS serwis
  6. FROM users u
  7. WHERE u.id=1
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.