Autor Zpráva
Holicz
Profil
Ahoj,

mám dvě tabulky, jedna pro komentáře a druhá pro jejich hodnocení. Potřebuji dva sql dotazy, jen pro řazení od nejlepších (nejvíce score=1 v tabulce druhé) a od nejhorších (nejvíce score=0; score 0 a 1 se nesčítají)

Komentáře:


Hodnocení:


Podařilo se mi vytvořit tenhle dotaz. Bohužel ani náznak funkčnosti.
SELECT doporuceni_comments.id, review, doporuceni_comments.autor, datum, nadrazene, text FROM doporuceni_comments LEFT OUTER JOIN doporuceni_comments_score ON doporuceni_comments.id = doporuceni_comments_score.autor WHERE review = '".mysql_real_escape_string($id)."' GROUP BY doporuceni_comments.id ORDER BY SUM(doporuceni_comments_score.score) DESC LIMIT 10 OFFSET " . $od
juriad
Profil
Máš chybu ve spojovací podmínce:
doporuceni_comments.id = doporuceni_comments_score.comment
Holicz
Profil
Aha chápu, díky. A jak bych docílil efektu, aby komentáře se stejným počtem score 1 byly řazeny podle score 0?
juriad
Profil
Takto:
ORDER BY SUM(doporuceni_comments_score.score = 1) DESC, SUM(doporuceni_comments_score.score = 0) DESC
Ta zvýrazněná část není nutná, jen se mi líbí ta podobnost. Porovnání x = y vrací buď 0 - pokud se nerovnají, nebo 1 - pokud se rovnají.
Holicz
Profil
Bohužel tento dotaz mi vypíše

Pořadí, počet kladných, počet záporných
1. 2+ 0-
2. 1+ 0-
3. 1+ 0-
4. 0+ 2-
5-10. 0+ 0-

To čtvrté by mělo být poslední
lionel messi
Profil
Holicz:
To čtvrté by mělo být poslední
Pokiaľ som správne pochopil, čo potrebuješ dosiahnuť, bude stačiť zmeniť zoraďovanie takto:
ORDER BY SUM(doporuceni_comments_score.score = 1) DESC, SUM(doporuceni_comments_score.score = 0) ASC

ASC môžeš pokojne vynechať, je to predvolený spôsob zoraďovania.
Holicz
Profil
To bylo první co jsem zkoušel, když nebyl požadovaný výsledek, ale kupodivu to vypsalo to stejné.
juriad
Profil
Holicz:
Nevěděl jsem, že score=0 znamená negativní hodnocení.
Zkus to ještě jednou. Jsem přesvědčený, že to (s ASC) bude ve správném pořadí. Ten dotaz znamená doslova: seřaď podle počtu jedniček sestupně a v případě shody podle počtu nul vzestupně.
Kajman
Profil
Pokud tam nebude hodnocení žádné, tak sum vrátí null, což je při řazení jiná hodnota než 0.
ORDER  BY Coalesce(Sum(doporuceni_comments_score.score = 1), 0) DESC,
          Coalesce(Sum(doporuceni_comments_score.score = 0), 0) ASC  
Holicz
Profil
Kajman:
Aha, díky moc!

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: