Autor Zpráva
frauen
Profil *
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
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
Alphard:
jak to bude řadit nehodnocené záznamy
Co použít RIGHT JOIN?
Alphard
Profil
[#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
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ý.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0