Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php, mysql]Zliczanie tematów
Forum PHP.pl > Forum > PHP
demoniczny
Witam!

Mam pewien problem z kodem poniżej nie wiem jak zrobić aby zliczał mi wszystkie tematy jakie znajdują się w tabeli forum_tematy oczywiscie wzgledem kategoria.id = temat.idkategorii .
Próbowałem to zrobić inner join ale nic mi to nie pomaga.

Chce uzyskac tylko liczbe tematow jakie znajduja sie w kategorii prosil bym o pomoc glowie sie z tym dlugo juz.

p.s dalej includuje templata.

  1. $sql = "SELECT forum_kategorie.id, forum_kategorie.nazwa, forum_kategorie.type, forum_kategorie.opis FROM forum_kategorie ORDER BY position ASC";
  2. $query = mysqli_query($db, $sql);
  3. while($row = mysqli_fetch_array($query))
  4. {
  5. $kategorie[] = array(
  6. 'id' => $row[0],
  7. 'nazwa' => $row[1],
  8. 'type' => $row[2],
  9. 'opis' => $row[3],
  10. );
  11.  
  12. }
demoniczny
kolego a powiedz mi na jakiej zasadzie mam zrobic tego counta? count(SELECT ALL TEMATS FROM tematy)questionmark.gif
PawelC
Najprostszy przykład:
  1. SELECT count(id) FROM tematy

Do tego zapytania, możesz sobie dorzucić warunki(WHERE), tak aby zliczyć tematy, które spełniają dane kryteria. Chyba nie zajrzałeś w linki które podałem, bo są tam wszędzie podane przykłady.
demoniczny
Tylko że ja potrzebuje to z dwóch tabel wyciągnąć i właśnie w tym jest problem ;/
forum_kategorie, forum_tematy i do tego dojdzie jeszcze forum_posty ale jak sie dowiem jak zrobic to z tematami to sobię już poradze

Dobra już sobie poradziłem ^^
zrobiłem funkcje tongue.gif
PawelC
Pochwal się tą funkcją, bo mam dziwne wrażenie, że zliczasz wszystko osobno tongue.gif
thek
Demoniczny... Toż to kwestia count + join. Robisz sobie tematy i łączysz z kategoriami, potem grupujesz po kategoriach i dajech counta. Nie znam struktury tabel czy ich połączeń ( 1-n lub n-n ) ale z grubsza idea ta sama.
demoniczny
  1. function countTopics($catid)
  2. {
  3. global $db;
  4. $sql = "SELECT count(forum_tematy.id) as counted FROM forum_tematy WHERE idkategoria=$catid";
  5. $query = mysqli_query($db, $sql);
  6. $row = mysqli_fetch_array($query);
  7. if(mysqli_num_rows($query)>0)
  8. {
  9. return $row[counted];
  10. }else{
  11. return 0;
  12. }
  13.  
  14. }
  15. function countPostsMain($catid)
  16. {
  17. global $db;
  18. $sql = "SELECT count(forum_posty.id) as counted FROM forum_posty INNER JOIN forum_tematy ON forum_tematy.id=forum_posty.idtemat INNER JOIN forum_kategorie ON forum_kategorie.id=forum_tematy.idkategoria WHERE idkategoria=$catid";
  19.  
  20. $query = mysqli_query($db, $sql);
  21. $row = mysqli_fetch_array($query);
  22. if(mysqli_num_rows($query)>0)
  23. {
  24. return $row[counted];
  25. }else{
  26. return 0;
  27. }


I potem w while
while($row = ...)
  1. {
  2. $posts = countPostsMain($row[0]); // id
  3.  
  4. i wsadzam do arraya itd
  5.  
  6. }


jeżeli da się to zrobić bez tych funkcji w jednym zapytaniu to był bym wdzięczny za pomoc
thek
Przecież jak wół napisałem... Grupuj po kategorii, a nie Wybierz kategorię wink.gif W efekcie powinieneś dostać liczbe postów dla każdej kategorii. Też będzie while (bo każdy count będzie osobnym rekordem wyniku), ale będzie jedno zapytanie, a nie tyle wywołań funkcji CountPostMain ile jest kategorii.
demoniczny
Mógł byś mi pokazać jakiś przykład bo za bardzo nie wiem o co ci chodzi z tym grupuj a wybierz... ;/

Kminie już kolejny dzień ;/ i lipa

Dobra już działa zakumałem biggrin.gif
molis85
nie lepiej zalozyc w tabeli z kategoriami dodatkowe pole, ktore przechowywaloby liczbe wszystkich kategorii i np po kazdym dodaniu nowego tematu inkrementowac ta liczbe ... albo w cronie raz na jakis czas zliczac wszystkie tematy i uaktualniac to pole ...
thek
molis... Tu już wchodzimy w optymalizacje konkretnych implementacji skryptów i ich strony bazodanowej. Jak najbardziej się zgadzam, że ma to sens i nie chodzi tylko o tematy smile.gif W forach pole z liczbą tematów, w tematach pole z liczbą postów i ogólnie w ten sposob. Oszczędzi bazie masę cierpienia na zliczaniu wszystkiego 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.