Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zlicznie określonych rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
drax
Chciałbym policzyć ilość komentarzy, która odnosi się do 1 newsa.
  1. SELECT comments.id, news.id FROM comments LEFT JOIN news ON news.id = comments.item_id WHERE itemtype_id = 1 AND news.id = comments.item_id


pobiera mi niestety wszystkie rekordy, gdzie
  1. itemtype_id = 1
a nie te gdzie jeszcze
  1. news.id = comments.item_id


Gdyby było potrzeba więcej informacji o strukturze tabeli, chętnie podam. Jednak myślę, że błąd leży po stronie zapytania i dlatego nie podaje więcej szczegółów.
Wyjaśnię tylko:

item_id - id odnoszące się do konkretnego newsa
itemtype_id - odnosi się do rodzaju komentarza (do newsa, galerii, artykułu itp.)
mortus
  1. SELECT COUNT(c.id) FROM comments c WHERE c.item_id=1;
drax
Nie chodzi o to.
Chodzi o to, aby policzyć ilość rekordów, gdzie news.id jest równy comments.item_id
mortus
Cytat
Chciałbym policzyć ilość komentarzy, która odnosi się do 1 newsa.
Chyba nie potrafisz zdefiniować pytania. Czy chodzi o policzenie liczby komentarzy dodanych do każdego newsa?
drax
Dla mnie pytanie jest jasne. Ale tak, chodzi o policzenie liczby komentarzy do jednego newsa.
mortus
  1. SELECT n.id, news_comments.comments_number
  2. FROM news n
  3. LEFT JOIN (SELECT c.item_id, COUNT(*) AS comments_number
  4. FROM comments c GROUP BY c.item_id) AS news_comments
  5. ON news_comments.item_id = n.id;
Mam nadzieję, że zadziała, bo na dzisiaj już kończę.
Powodzenia smile.gif

EDIT
Nie wiem, do której tabeli odnosi się itemtype_id, bo pasuje tutaj i tutaj.
drax
  1. CREATE TABLE IF NOT EXISTS `news` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `title` varchar(255) NOT NULL,
  4. `content` text NOT NULL,
  5. `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


  1. CREATE TABLE IF NOT EXISTS `comments` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `text` varchar(255) NOT NULL,
  4. `author` varchar(30) NOT NULL,
  5. `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  6. `ip` varchar(30) NOT NULL,
  7. `itemtype_id` int(10) NOT NULL,
  8. `item_id` int(10) NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;


itemtype_id to miejsce, do którego odnosi się komentarz. Newsy mają id = 1

Mam nadzieję, że bardziej zrozumiały jest teraz mój cel smile.gif
pmir13
  1. SELECT n.id, COALESCE( c.comment_count, 0 ) AS komentarzy
  2. FROM news n
  3. LEFT JOIN ( SELECT item_id, count( * ) AS comment_count
  4. FROM comments
  5. WHERE itemtype_id =1
  6. GROUP BY item_id )c
  7. ON n.id = c.item_id
drax
Dziękuje za pomoc smile.gif
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.