Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] łączenie tabel (?)
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


w swoim skrypcie (~forum) mam tabele z użytkownikami i postami,

użytkowników pobieram w taki sposób sposób

  1. SELECT * FROM `users` WHERE ID IN(1,2,3,4,5) ORDER BY id ASC ";


co zwraca mi coś takiego jak

id login (...)
1 mietek
2 stasiek
3 zdzisiek
4 władek
5 leszek

potem aby sprawdzić ile postów napisali ci użytkownicy... robie coś takiego

  1. SELECT autor AS id, count( id ) AS num FROM posts WHERE autor IN(1,2,3,4,5) GROUP BY autor


co zwraca mi
id num
1 5
2 7
3 2
4 0
5 10

jak sie domyślacie - autor to id autora, count(id) - liczba postów napisanych przez autora

w jaki sposób moge połączyć te 2 zapytania (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) czyli żeby mój wynik zapytania był taki


id login (...) liczba_postow
1 mietek (...) 5
2 stasiek (...) 7
3 zdzisiek (...) 2
4 władek (...) 0
5 leszek (...) 10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Wicepsik
post
Post #2





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


Podaj struktury tabel.
Go to the top of the page
+Quote Post
peter13135
post
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. CREATE TABLE IF NOT EXISTS `posts` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `topic` int(11) NOT NULL,
  4. `message` text collate utf8_unicode_ci NOT NULL,
  5. `autor` int(11) NOT NULL,
  6. `date` datetime NOT NULL,
  7. `edit_autor` int(11) NOT NULL,
  8. `edit_date` datetime NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
  11.  
  12. CREATE TABLE IF NOT EXISTS `users` (
  13. `id` int(11) NOT NULL AUTO_INCREMENT,
  14. `login` varchar(20) collate utf8_unicode_ci NOT NULL,
  15. `pass` varchar(32) collate utf8_unicode_ci NOT NULL,
  16. `email` varchar(30) collate utf8_unicode_ci NOT NULL,
  17. `gg` varchar(13) collate utf8_unicode_ci DEFAULT NULL,
  18. `rank` varchar(4) collate utf8_unicode_ci DEFAULT NULL,
  19. `la` datetime DEFAULT NULL,
  20. `www` varchar(100) collate utf8_unicode_ci DEFAULT NULL,
  21. `city` varchar(30) collate utf8_unicode_ci DEFAULT NULL,
  22. `description` text collate utf8_unicode_ci,
  23. `sex` int(1) DEFAULT NULL,
  24. `join` datetime DEFAULT NULL,
  25. `avatar` varchar(100) collate utf8_unicode_ci DEFAULT NULL,
  26. `ip` varchar(15) collate utf8_unicode_ci DEFAULT NULL,
  27. `last_post` int(11) DEFAULT NULL,
  28. PRIMARY KEY (`id`)
  29. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
Go to the top of the page
+Quote Post
planet
post
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 6
Dołączył: 15.07.2009
Skąd: Śląsk->Ruda Śląska

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


SELECT *, COUNT(p.id) as ilosc_postow FROM users u LEFT JOIN posts p ON (u.id=p.autor) GROUP BY u.id ASC
Go to the top of the page
+Quote Post
peter13135
post
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


hmm, niby działa, ale ten kod dodaje mi kolumny postów

wygląda to tak

id login pass email (dalsze kolumny z tabeli users) id topic message autor (dalsze kolumny z tabeli posts) ilosc postów

a ja bym chciał tak

id login pass email (dalsze kolumny z tabeli users) ilosc postów
Go to the top of the page
+Quote Post
Wicepsik
post
Post #6





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


Nigdy nie robiłeś zapytań ?
Poczytaj tutaj http://aylard.viawww.pl/2009/01/01/mysql-relacje/

  1. SELECT u.id, u.login, COUNT( p.id ) AS ilosc_postow
  2. FROM users u
  3. LEFT JOIN posts p ON ( u.id = p.autor )
  4. GROUP BY u.id ASC LIMIT 0, 30
Go to the top of the page
+Quote Post
planet
post
Post #7





Grupa: Zarejestrowani
Postów: 61
Pomógł: 6
Dołączył: 15.07.2009
Skąd: Śląsk->Ruda Śląska

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


to zrób tak:

  1. SELECT u.*, COUNT(p.id) AS ilosc_postow FROM users u LEFT JOIN posts p ON (u.id=p.autor) GROUP BY u.id ASC



// używaj BBCode jak wklejasz kod! (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
// ayeo
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 16:46