Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobranie komentarzy + liczenie
barat
post
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


Witam.
Mam mały problem ze sformułowaniem zapytania.

Mam dwie tabele:

TUTORIALS
| tutorials_id | tutorials_reszta |

gdzie |tutorials_reszta| wprowadzone dla uproszczenia (normalnie jest tam więcej kolumn, ale po co utrudniać - do zapytania się nie przydadzą)

COMMENTS
| comments_id | comments_user | comments_comment | comments_date|commenst_tutorial |

gdzie |commenst_tutorial| = |tutorials_id|

Teraz na czym mają polegać zapytania:

1) Pobrać z bazy wszystkie komentarze z tabeli COMMENST dla danego |commenst_tutorial | jednocześnie licząc ile jest tych komentarzy ...

2) Pobrać z bazy wszystkie tutoriale z tabeli TUTORIALS jednocześnie licząc ile komentarzy w tabeli COMMENST jest dla danego |tutorials_id|

Oczywiście można iść na łatwiznę i mieć w tabeli TUTORIALS kolumnę, w której przy każdym komentarzu dodawane jest +1, a przy każdym usunięciu jest -1, ale w takim wypadku trzeba zawsze o tym pamiętać. Dodatkowo gdy kiedyś pójdzie jakiś SPAM, to wygodniej mi usunąc komentarze bezpośrednio w bazie - niestety wtedy także muszę lecieć do tabeli TUTORIALS i zmieniać stan licznika.
Stąd też mój pomysł, że pewnie jest jakieś ładne zapytanie MySQL.
Niestety w MySQL aż tak "wywijać" JESZCZE nie potrafię, więc pytam lepszych (muszę kiedyś znaleźć czas i się przekopać przez dokumentację MySQL bo coraz częściej odczuwam swoje ograniczenie w tym zakresie:) )

Dla (1) próbowałem coś w rodzaju:

  1. SELECT a.*, COUNT(b.comments_id) AS FROM comments a, comments b WHERE a.`commenst_tutorial` = b.`commenst_tutorial` AND a.`commenst_tutorial` = 'clean_vertical_menu'


Ale zwraca tylko jeden wiersz i to dodatkowo ze złą ilością ...

Ktoś ma jakiś pomysł?

Jeśli to pomoże - MySQL 5.1.30

Ten post edytował barat 25.02.2009, 09:13:44
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Do 1 bedzie tak
  1. SELECT *, COUNT(comments_id) AS ile FROM COMMENTS GROUP BY comments_id


Do 2 tak
  1. SELECT *, (SELECT COUNT(comments_id) FROM COMMENTS c WHERE (t.tutorials_id=c.commenst_tutorial)) AS ile
  2. FROM TUTORIALS t


Ten post edytował kefirek 25.02.2009, 09:30:49
Go to the top of the page
+Quote Post
barat
post
Post #3





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


w (2) tak mi się wydawało, że będzie podzapytanie - działa bardzo dobrze. DZIĘKI (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Niestety (1) spowoduje wyświetlenie po jednym komentarzu dla każdego |commenst_tutorial | z liczbą tych komentarzy - czyli mniejwięcej zrobi to co zapytanie do przypadku (2). A mi chodzi o to, że wyświetlam jakiś tutorial, chcę mieć wszystkie komentarze do niego, i jednocześnie np w pierwszym wierszu informację ile tych komentarzy jest ...

Najważniejsze, że zapytanie 1 działa poprawnie, to mi było bardziej potrzebne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W drugim przypadku zawsze można zrobić dwa zapytania (jedno do pobrania komentarzy i jedno dla zliczenia ich - baza aż tak nie ucierpi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )

Ten post edytował barat 25.02.2009, 09:51:30
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.08.2025 - 10:30