Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zapytanie - count
potreb
post
Post #1





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Witam, napotkałem pewien problem.
Tworze zapytanie do forum z count.

  1. $sql = "SELECT a.*, b.*, count(distinct if(tcat>0, tid, null)) as topics FROM forum a
  2. LEFT JOIN forum_tp b ON b.tfid = a.fid
  3. WHERE a.`fid` = '".$_GET['fid']."' AND b.`tcat` = '0'
  4. ORDER BY b.tdate DESC";



W `forum_top` posiadam wiele tematów, z tym, że chciałbym podliczyć ilość postów do danego tematu, jednak stosując count(distinct zawsze zwraca mi jeden rekord, jak wyrzucę count wyświetla mi wszystkie rekordy.

Okey, namieszałem sobie.
tcat = 0 - topics
tcat = tid - posts

Czyli zaprzeczyłem zapytaniem

Czyli może lepiej rozdzielić tematy na odpowiedzi??

Ten post edytował potreb 23.08.2009, 19:07:49
Go to the top of the page
+Quote Post
thek
post
Post #2





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




To ja zadam pytanie...Gdzie masz jakikolwiek podpięcie tabeli z postami tyczącymi się danego tematu by móc je policzyć? Bo ja nie widzę. Łączysz tylko tabelę forum z tabelą topiców jesli dobrze widzę, ale tabeli postów nawet nie ruszasz, więc nie spodziewaj się od bazy wpisania tu czegokolwiek. Musiałbyś jeszcze dorzucić join do tabeli postów i wyciągnąć z niej interesujące Cię dane.
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. GROUP BY id_tematu
Go to the top of the page
+Quote Post
potreb
post
Post #4





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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




Zrobiłem rozdział tabel, wszystko ładnie działa oprócz jednego zapytania.
  1. SELECT a.*, b.*, c.* FROM forum a
  2. LEFT JOIN forum_topics b ON b.tfid = a.fid
  3. LEFT JOIN forum_posts c ON c.pcat = b.tid
  4. WHERE c.pcat = '".$_GET['tid']."'
  5. ORDER BY b.tdate DESC


Jeżeli w forum_posts nie ma żadnej odpowiedzi to nic się nie wyświetla :/

Ten post edytował potreb 23.08.2009, 20:02:32
Go to the top of the page
+Quote Post
thek
post
Post #5





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




Nie dziwię się... Zauważ, że c.pcat jest w tabeli postów. Jako że tabela postów jest pusta, to po joinowaniu z pustą tabelą wszystkie rekordy w bazie wyników tymczasowych mają w kolumnach pobranych z c same NULL (IMG:style_emoticons/default/smile.gif) wyświetl sobie tę bazę bez warunku WHERE a sam to zobaczysz (IMG:style_emoticons/default/winksmiley.jpg) Jak więc masz znaleźć jakakolwiek wartość pośród samych NULL? Wynik masz zerowy bo takie rekordy nie istnieją i stąd takie zachowanie. Za to użycie b.tid z tabeli tematów zwróciłoby Ci rekordy bo w tej tabeli zapewne COŚ jest. Tematy istnieją na pewno w przeciwieństwie do tabeli postów. Trochę pomyślunku i sam byś na to wpadł (IMG:style_emoticons/default/smile.gif)

Ten post edytował thek 23.08.2009, 21:52:57
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: 23.08.2025 - 04:25