Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie z grop by
Forum PHP.pl > Forum > Bazy danych > MySQL
behemot
Mam dwie taleblki

newsy:
news_id | tresc
1 | tresc_1
2 | tresc 2
3 | tresc 3

itd.
oraz druga tabelke komentarze

kom_id | news_id | komentarz
1 | 1 | komentarz do newsa_1
2 | 1 | komentarz do newsa_1
3 | 3 | komentarz do newsa_3

jak teraz jak powinno wygladac zapytanie aby uzyskac ilosc komentarzy do poszczegolnych newsow

tzn
news_id | ilosc_komentarza
1 | 2
2 | 0
3 | 1

Wiem jak zrobic zaby wyswietlily sie newsy z komentarzami i z iloscia komentarzy, ale jesli news nie ma komentarzy (2 wiersz w pow. tabeli) to sie nie wyswietla. Jakies propozycje?
kossa
$ilosc_komentarzy=mysql_fetch_row(mysql_db_query("baza_danych","SELECT count(*) FROM komentarze where id_komentarza = $id_komentarza"));

teraz juz instrukcja warunkowa if w zaleznosci od wyniku i to wszystko

chyba o to Tobie chodzilo smile.gif jesli ne to rosze o sprostowanie

pozdrawiam
Lukasz
behemot
Cytat
[php:1:b9749d216c]<?php
ilosc_komentarzy=mysql_fetch_row(mysql_db_query("baza_danych","SELECT count(*) FROM komentarze where id_komentarza = $id_komentarza"));
?>[/php:1:b9749d216c]

teraz juz instrukcja warunkowa if w zaleznosci od wyniku i to wszystko

Tez o tym myslalem. Tylko jesli w bazie bedzie 100 newsow i do kazdego bede chcial wyswietlic ilosc komentarzy, to bede musial zrobic 100 zapytan i jeszcze 100 sprawdzen, a wolabym to zrobic w jednym zapytaniu. Jesli sie da;
Wykminilem cos takiego
[sql:1:b9749d216c]
select n.news_id,count(k.news_id) AS ilosc_kom from newsy n, komentarze k where k.news_id=n.news_id group by k.news_id;[/sql:1:b9749d216c]
Tylko wtedy nie wyswietla mi tych newsow ktorych liczba komentarzy jest rowan zero. Ale chyba z tym zapytaniem bede musial cos kombinowac.
kossa
Sprobuj tak:

pisze to na szybko z glowy:

[php:1:87994e8e91]<?php
$res=mysql_query("SELECT * from komentarze");
while($row = mysql_fetch_array($res))
{
$id_komentarza = $row["id"];
$komentarz=$row["komentarz"];
echo $komentarz;
ilosc_komentarzy=mysql_fetch_row(mysql_db_query ("baza_danych","SELECT count(*) FROM
komentarze where id_komentarza = $id_komentarza"));
echo $ilosc_komentarzy;
}
?>[/php:1:87994e8e91]

mozesz tez zrobic zapytanie w zapytaniu bardziej szczegolowe smile.gif

Lukasz
FiDO
On chce jedno zapytanie. I o ile sie nie myle da sie to zrobic outer join'em. Kiedys cos takiego widzialem, ale nie moge sobie przypomniec gdzie. Tych join'ow nigdy nie stosowalem, wiec ciezko mi Ci pomoc, ale dam Ci chodziaz swiadomosc, ze da sie to zrobic.
scanner
Proponuję przeanalizować wątek: http://forum.php.pl/viewtopic.php?t=2617
uboottd
Dla leniwych:
[sql:1:3316649671]
SELECT n.news_id,count(k.news_id) AS ilosc_kom FROM newsy AS n LEFT JOIN komentarze AS k ON k.news_id=n.news_id
GROUP BY k.news_id;
[/sql:1:3316649671]
behemot
Dzieki bardzo wszytkim za pomoc!
Po drobnych modyfikacjach:
[sql:1:11aab8a87a]
SELECT n.news_id,count(k.news_id) AS ilosc_kom
FROM newsy AS n LEFT OUTER JOIN komentarze AS k ON k.news_id=n.news_id
GROUP BY n.news_id;
[/sql:1:11aab8a87a]
Wszytko dziala okej! 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.