Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Pobieranie danych z kilku tabel jednocześnie., z użyciem funkcji COUNT().
krzywy36
post 1.03.2011, 21:14:33
Post #1





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


Oto co chcę uzyskać: pobieram newsy z tabeli news, do tego dołączam nazwę użytkownika z tabeli users (na podstawie pola "author_id" w news) i do tego dołączam ilość komentarzy do danego newsa z tabeli comments (na podstawie pola "item_id" w comments i id newsa). Samo pobieranie z newsy + nazwa użutkownika działa ale z COUNT z trzeciej tabeli już nie mogę się uporać.
Narazie doszedłem do takiego czegoś:
  1. SELECT news.id, news.title, news.content, DATE_FORMAT(news.date, '%d/%m/%y') AS date, DATE_FORMAT(news.date, '%H:%i') AS time, users.username AS username, COUNT(comments.content) AS comments_number FROM news, users, comments WHERE users.id = news.author_id AND comments.item_id = news.id ORDER BY news.id DESC

ale po pierwsze, nie są pobierane wszystkie newsy tylko jeden i zliczane są wszystkie komentarze a nie tylko te z id newsa.
Wskaże ktoś błąd? smile.gif


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
Grzyw
post 1.03.2011, 21:58:47
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


  1. SELECT
  2. news.id,
  3. news.title,
  4. news.content,
  5. (SELECT COUNT(comments.content) FROM comments WHERE comments.item_id = news.id),
  6. DATE_FORMAT(news.date, '%d/%m/%y') AS date,
  7. DATE_FORMAT(news.date, '%H:%i') AS time,
  8. users.username AS username
  9. FROM news JOIN users ON users.id = news.author_id
  10. ORDER BY news.id DESC


Nie wiem, czy się nie bachnąłem, pisane "z palca". Zwróć uwagę, że zastąpiłem WHERE'y JOIN'ami - polecam się przestawićsmile.gif

Ten post edytował Grzyw 1.03.2011, 21:59:52


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
mortus
post 1.03.2011, 22:03:23
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Jeśli to ma być tylko liczba komentarzy, to można zrobić tak:
  1. SELECT n.id, n.title, n.content, DATE_FORMAT(n.date, '%d/%m/%y') AS date, DATE_FORMAT(n.date, '%H:%i') AS time, u.username AS username, (SELECT COUNT(*) FROM comments c WHERE c.item_id = n.id) AS comments_number FROM news n, users u WHERE u.id = n.author_id ORDER BY n.id DESC


@up: nie bachnąłeś się i oczywiście zgadzam się co do JOINów.

Ten post edytował mortus 1.03.2011, 22:05:06
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 Wersja Lo-Fi Aktualny czas: 29.06.2025 - 04:37