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ę
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ć
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)
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
no tak, oczywiście nie doczytałem do końca 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