Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php, mysql]Zliczanie tematów
demoniczny
post 18.07.2011, 20:38:41
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


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. }
Go to the top of the page
+Quote Post
PawelC
post 18.07.2011, 20:41:08
Post #2





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


A o count() słyszał?
http://forum.php.pl/index.php?showtopic=33961
http://forum.php.pl/index.php?showtopic=137516
http://forum.php.pl/index.php?showtopic=127570
http://forum.php.pl/index.php?showtopic=94949
http://www.tizag.com/mysqlTutorial/mysqlcount.php
Go to the top of the page
+Quote Post
demoniczny
post 18.07.2011, 20:42:18
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


kolego a powiedz mi na jakiej zasadzie mam zrobic tego counta? count(SELECT ALL TEMATS FROM tematy)questionmark.gif
Go to the top of the page
+Quote Post
PawelC
post 18.07.2011, 20:43:55
Post #4





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


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.

Ten post edytował ExPlOiT 18.07.2011, 20:45:45
Go to the top of the page
+Quote Post
demoniczny
post 18.07.2011, 21:02:40
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


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
Go to the top of the page
+Quote Post
PawelC
post 18.07.2011, 21:08:13
Post #6





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Pochwal się tą funkcją, bo mam dziwne wrażenie, że zliczasz wszystko osobno tongue.gif
Go to the top of the page
+Quote Post
thek
post 18.07.2011, 22:04:31
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
demoniczny
post 19.07.2011, 12:25:17
Post #8





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


  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

Ten post edytował demoniczny 19.07.2011, 12:27:15
Go to the top of the page
+Quote Post
thek
post 19.07.2011, 12:52:59
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
demoniczny
post 21.07.2011, 01:29:23
Post #10





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


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
Go to the top of the page
+Quote Post
molis85
post 21.07.2011, 14:23:16
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 21.11.2010

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


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 ...
Go to the top of the page
+Quote Post
thek
post 21.07.2011, 15:00:59
Post #12





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 12.07.2025 - 14:39