Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem zliczanie ilosci wpisów w bazie - 2 tabele
Forum PHP.pl > Forum > Bazy danych > MySQL
Domini0
Witam!


Problem wyglada następująco otóż mam 2 tabele w bazie jedna z komentarzami a druga z newsami...


Kod
Komentarze:
|Cid|cnid|...


Gdzie CID to id komentarza a cnid to id newsa w którym ma sie wyświetlać.

Problem polega na tym że nie mogę wpaść na pomysł jak poprawnie wyświetlić ilość komentarzy przy każdym newsie. Mógł by mnie ktoś jakoś ukierunkować?


Pozdrawiam ! smile.gif
nospor
Problem ma się do php jak czajnik do ksiezyca winksmiley.jpg przenosze

  1. SELECT n.*, count(c.ID) commentscount FROM news n
  2. LEFT JOIN comments c ON c.cnid=n.id
  3. GROUP BY n.id


Lepiej jakbys jednak zrobil dodatkowe pole w newsach, w ktorym na biezacą bedziesz zapisywal liczbe komentarzy dla danego newsa.
icetique
Cytat
Lepiej jakbys jednak zrobil dodatkowe pole w newsach, w ktorym na biezacą bedziesz zapisywal liczbe komentarzy dla danego newsa.


Dużo lepiej. Przy dużych ilościach komentarzy i newsów zapytanie wyżej po prostu nie da rady.
Domini0
Jak by to wg. was miało wyglądać ?

Bo nie wiem zbytnio w jaki sposób zrobić zliczanie tego.
blooregard
Dodajesz pole 'ilosc_komentarzy' i w każdym newsie to pole inkrementujesz po dodaniu komentarza/dekrementujesz po jego usunięciu.
Mchl
Cytat(nospor @ 4.03.2010, 08:06:56 ) *
Kod
SELECT n.*, count(c.ID) commentscount FROM news nLEFT JOIN comments c ON c.cnid=n.id
GROUP BY n.id


Zrobiłem sobie dla zabawy takie porównanie.

Kod
SELECT SQL_NO_CACHE n.ID, count(c.ID) commentscount FROM news n
LEFT JOIN comments c ON c.cnid=n.id
GROUP BY n.id


7756 rows fetched in 3.7738s (2.6421s)

Kod
SELECT SQL_NO_CACHE n.ID, c. commentscount
FROM
  news n
LEFT JOIN (
  SELECT
    cnid, COUNT(*) AS commentscount
  FROM
    comments
  GROUP BY
    cnid) AS c
ON
  c.cnid=n.id


7756 rows fetched in 3.1093s (0.4406s)

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.