Autor | Zpráva | ||
---|---|---|---|
frauen Profil * |
#1 · Zasláno: 17. 5. 2011, 16:59:56
Zdravím,
chtěl bych se zeptat, jak mám vypsat posledních 5 nejlépe hodnocených článků tento měsíc? Dostal jsem se pouze k tomuto: <?php // Články $query_articles = mysql_query("SELECT `id`, `title` FROM `articles` WHERE `published` = 1"); if (mysql_num_rows($query_articles) > 0) { while ($row_articles = mysql_fetch_array($query_articles)) { // Je článek ohodnocen? Pokud ano, zjisti jeho hodnocení $query_rating = mysql_query("SELECT `value` FROM `articles-rating` WHERE `article` = " . $row_articles['id']); if (mysql_num_rows($query_rating) > 0) { $count = 0; $value = 0; while ($row_rating = mysql_fetch_array($query_rating)) { $count++; $value += $row_rating['value']; } $rating = $value / $count; } else { $rating = 0; } // Výpis článků, které jsou ohodnoceny if ($rating > 0) { echo $row_articles['title']; } } } ?> Chtěl bych se však zeptat, jak vypsat hodnocené články seřazené podle hodnoty hodnocení? Děkuji mnohokrát. |
||
Alphard Profil |
#2 · Zasláno: 17. 5. 2011, 17:13:05 · Upravil/a: Alphard
Aj, najděte si něco o join a seskupování.
select a.id, a.title, avg(r.value) rating from articles a left join `articles-rating` r on a.id = r.article where a.published = 1 group by a.id order by rating desc limit 5 Teď nevím, jak to bude řadit nehodnocené záznamy (null). Kdyžtak tam dejte isnull(..., 0). |
||
o_O Profil |
#3 · Zasláno: 17. 5. 2011, 17:23:04
Alphard:
„jak to bude řadit nehodnocené záznamy“ Co použít RIGHT JOIN? |
||
Alphard Profil |
#4 · Zasláno: 17. 5. 2011, 17:28:35 · Upravil/a: Alphard
[#3] o_O
Možná nechápu vaši myšlenku, ale myslím, že by to bylo úplně stejné. Edit - aha, takže vynechat. Já myslel, že byste otočil i pořadí tabulek. Takto ano. Jestli jste chtěl záznamy s null úplně vynechat, tak prosté join, což je myslím alias inner join. |
||
o_O Profil |
#5 · Zasláno: 17. 5. 2011, 17:33:33
Alphard:
„záznamy s null úplně vynechat“ IMHO je nelogické vypisovat v kategorii "Nejlépe hodnocené články" i ty, které nebyly hodnoceny. Right join vynechá záznamy, u kterých je požadovaný obsah (v tomto případě "r.article") null-ový. |
||
Časová prodleva: 13 let
|
0