Zliczanie komentarzy

Witam!

Próbuję na stronie zrobic coś takiego, żeby przy każdym artykule pojawiały sie komentarze i pojawiała sie ich liczba. Ale niestety mam małe problemy otóż mam kod:

"select id1, temat, tresc, author, date, idart, count(idart) as liczba_komen from news2, komentarzeartykuly where id1=idart GROUP BY id1 order by date desc"; //zapytanie 


// !!!!!!!!!! TABELA DLA KOMENTARZY !!!!!! //

echo '';

echo '';


$komentarze = $row['liczba_komen'];

$komentarze2 = '0';

if ($row['id1'] = $row['idart']) {

echo 'Komentarze(',$komentarze, ')'; }

	else {

			echo 'Komentarze(',$komentarze2,')'; }


echo '';

echo '';[/code]




To co napisałem powyżej wyświetla mi tylko 3 artykuły do których przypisano już komentarze. Jeżeli nie ma w zapytaniu

[code]WHERE id1=idart
to wtedy wyświetla mi wszędzie ilośc wszystkich komentarzy (w każdym artykule tyle samo). Wiem że jest to błędne. Ale nie wiem, jak zrobic żeby wyświetlało wszystkie komentarze… Te które mają komentarze i nie mają, a jeżeli liczba komentarzy jest 0 to po prostu żeby wyświetlało się

komentarze(0)

ciężko powiedzieć jeżeli nie podajesz dokładnej struktury bazy (ciężko trochę zorientować się które pole za co odpowiada, ale na tyle na ile rozumiem, spróbuj czegoś w tym stylu:

SELECT n.*, count(k.*) AS liczba_komen FROM news2 n INNER JOIN komentarzeartykuly k ON n.idl = k.idart GROUP BY n.idl ORDER BY date DESC;

może będziesz musiał podać resztę pól w GROUP BY

nie wiem co tutaj chciałeś zrobić, ale wystarczy, ze po zrobieniu fetch() na powyższym (moim) zapytaniu, zrobisz coś takiego:

echo 'Komentarze('.$komentarze2.')';

P.S.

Przemyśl raz jeszcze nazwy kolumn i tabel, bo na chwilę obecną jest to strasznie nieczytelne. Masz masę błędów w tym co próbowałeś napisać

A więc tak moja baza to 2 table

KOMENTARZEARTYKUłY:

-ID (w sumie jest nie potrzebne, autoincrement)

-LOGIN (os. która daje komentarz)

-DATEKOMEN (data dodania)

-KOMENTARZ (treśc komentarza)

-idart (tu ma być dodawany ID1 z artykułu do którego chcemy przypisac komentarz)

NEWS2

ID1 (automatyczny id dodawany przy kolejnych artykułach)

TRESC (wiadomo :smiley: )

AUTHOR (tez wiadomo :smiley: )

DATE (tak, tak Data :smiley: )

A przy tym co ty Airborn napisałeś wyskakuje:

Dobra widze że mnie nikt nie rozumie:) Więc zadam takie pytani:P

Mam tabele takie jak powyżej:P I teraz mam np. artykuły który ma

ID1 = 1 , ID1 = 2, ID1 =3 , ID=4.

W tabeli komentarzy mam 4 komentarze z

ID =1 ==> idart = 2

ID= 2 ==> idart=2

ID = 3 ==> idart=1

ID=4 ==> idart =1

I teraz chcę wyświetlic KAżDY artykół, a pod spodem napis

KOMENTARZE (liczbakomentarzy DANEGO ARTYKUŁU)

Udaje mi sie zrobic tylko tak że wszystko jest ładnie podliczane, ale wyświetlają sie tylko artykuły do których jest przypisany jakiś komentarz. Czyli w tym przypadku nie wyświetli mi ani artykułu o ID = 3 ani artykułu ID=4. Powyższy efekt otrzymuje po wysłaniu zapytania:

"SELECT *, count(*) as liczba_komen FROM news2 n INNER JOIN komentarzeartykuly k where n.id1 = k.idart GROUP BY n.id1 ORDER BY date DESC"

JEżELI USUNę ZAPYTANIE WHERE, wyświetlają mi się wszystkie artykuły, ale podliczone są też niestety wszystkie komentarze. Czyli :

treśc komentarza o ID=1

komentarze(4)


treśc komentarza o ID=2

komentarze(4)


treśc komentarza o ID=3

komentarze(4)


treśc komentarza o ID=4

komentarze(4)

Więc jak zrobić żeby to ustawic tak jak chcę?:slight_smile:

zamiast INNER JOIN daj LEFT JOIN, ew LEFT OUTER JOIN

PRóBUJE ALE NIC Z TEGO ;/ W OBU PRZYPADKACH WYSKAKUJE:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE k.idart = n.id1 GROUP BY n.id1 ORDER BY date DESC' at line 1

Lub coś podobnego jak pozmieniam;/

no tak, oczywiście nie doczytałem do końca :confused: nie możesz użyć w tym miejscu WHERE, tylko ON, ponadto nie możesz zliczać wszystkiego - count(*) bo otrzymasz ilość wszystkich wierszy. powinieneś był zliczać k.id

NIeee no kuuuurrde :slight_smile: WIelkie dzięki Airborn :slight_smile: Wisze Ci wielkiego browara :smiley: