Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem zliczanie ilosci wpisów w bazie - 2 tabele
Domini0
post 4.03.2010, 07:57:15
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.03.2010

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post 4.03.2010, 08:06:56
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
icetique
post 4.03.2010, 11:28:30
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 13
Dołączył: 12.04.2009

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


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.
Go to the top of the page
+Quote Post
Domini0
post 4.03.2010, 11:53:32
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.03.2010

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


Jak by to wg. was miało wyglądać ?

Bo nie wiem zbytnio w jaki sposób zrobić zliczanie tego.
Go to the top of the page
+Quote Post
blooregard
post 4.03.2010, 11:57:48
Post #5


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Dodajesz pole 'ilosc_komentarzy' i w każdym newsie to pole inkrementujesz po dodaniu komentarza/dekrementujesz po jego usunięciu.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Mchl
post 4.03.2010, 13:55:49
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


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
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: 14.08.2025 - 00:22