Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2x COUNT()
Forum PHP.pl > Forum > Bazy danych > MySQL
kicaj
Mam 3 tabele: users, messages, books
Zapytanie:
  1. SELECT COUNT(m.message_id), u.user_nick
  2. FROM messages m, users u
  3. WHERE m.message_user_id = u.user_id AND u.user_id = 1 LIMIT 1

No i zwraca mi poprawnie!

Drugie zapytanie jest prawie identyczne:
  1. SELECT COUNT(b.book_id), u.user_nick
  2. FROM books b, users u
  3. WHERE b.book_user_id = u.user_id AND u.user_id = 1 LIMIT 1


Zas zapytanie:
  1. SELECT COUNT(b.book_id), COUNT(m.message_id), u.user_nick
  2. FROM books b, messages m, users u
  3. WHERE u.user_id = 1 b.book_user_id = u.user_id AND m.message_user_id = u.user_id LIMIT 1
Zwraca dwie takie same liczby b.book_id i m.message_id

Jak zrobic to w jednym zapytaniu, aby wynik wygladal tak mniejwiecej:
Kod
books: 3; messages: 5; kicaj_
popbart
  1. SELECT COUNT(b.book_id), COUNT(m.message_id), u.user_nick
  2. FROM books b INNER JOIN users u ON(b.book_user_id = u.user_id) INNER JOIN messages m ON(m.message_user_id = u.user_id)
  3. WHERE u.user_id = 1
  4. GROUP BY u.user_nick
kicaj
Kod
Array
(
   [0] => 15
   [1] => 15
   [2] => kicaj_
)

A powinno byc:
3
5
kicaj_

[UPDATE]
Szczegolowo przeszukalem forum i znalazlem, po lekkiej modyfikacji:
  1. SELECT u.user_nick, COUNT( DISTINCT b.book_id ) AS books, COUNT( DISTINCT m.message_id ) AS messages
  2. FROM users u
  3. LEFT JOIN books b ON ( u.user_id = b.book_user_id )
  4. LEFT JOIN messages m ON ( u.user_id = m.message_user_id )
  5. WHERE u.user_id =2
  6. GROUP BY u.user_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.