Autor | Zpráva | ||
---|---|---|---|
kolooo Profil * |
#1 · Zasláno: 22. 5. 2011, 10:58:27
Ahojte, mam nasledovny problem:
uzivatelia mozu hodnotit clanky od 1 do 7 bodov, pricom 7 je najviac. Tieto hodnotenia si aj s datumom ukladam do samostatnej tabulky a vzdy celkove hodnotenie aktualizujem aj v tabulke s clankom. Ale ja by som chcel teraz spravit ze vypisat 5 najlepsie hodnotenych clankov za poslednych 7 dni s tym, ze clanok musel hodnotit aspon 3 ludia, aby to malo nejaku kvalitu. Vedeli by ste mi prosim vas poradit nejaky vhodny select, s ktorym to dokazem? Vopred velmi pekne dakujem. |
||
Keeehi Profil |
#2 · Zasláno: 22. 5. 2011, 12:21:16 · Upravil/a: Keeehi
SELECT * FROM tabulka WHERE count(id_clanku) >= 3 GROUP BY id_clanku ORDER BY sum(hodnoceni) LIMIT 5 |
||
TomášK Profil |
#3 · Zasláno: 22. 5. 2011, 12:31:35 · Upravil/a: TomášK
Keeehi:
To nebude fungovat, WHERE část se vyhodnocuje před GROUP BY, nelze tam použít COUNT(). Následující dotaz by měl být ke správnému výsledku blíž, ale nezkoušel jsem ho. SELECT * FROM clanky JOIN hodnoceni ON hodnoceni.clanek_id = clanky.id WHERE hodnoceni.created_at >= '2011-05-15' GROUP BY clanky.id HAVING count(*) >= 3 ORDER BY sum(id_clanku) LIMIT 5 |
||
kolooo Profil * |
#4 · Zasláno: 22. 5. 2011, 13:40:52
TomášK:
Dakujem, ale kde je nejaka znamka o tych bodoch? Nerozumiem co spravi sum(id_clanku). Ale este taky detail, ze hodnotenie clanku je SUMA/pocet_hlasujucich, a podla toho by som to chcel utriedit. Da sa to? Dakujem za Vase rady. |
||
Keeehi Profil |
#5 · Zasláno: 22. 5. 2011, 14:11:21
kolooo:
„Ale este taky detail, ze hodnotenie clanku je SUMA/pocet_hlasujucich,“ ORDER BY sum(hodnoceni) /count(*) - ale toto není ta nejlepší metoda Je rozdíl, jestli článek má 1000x 7 bodů a 1x 6 bodů, nebo 3x 7 bodů. A to, že ten druhý by měl být na vrcholu mezi články mi přirozené nepřijde. http://www.evanmiller.org/how-not-to-sort-by-average-rating.html |
||
kolooo Profil * |
#6 · Zasláno: 22. 5. 2011, 14:21:18
Nefunguje mi to :(
SELECT * FROM clanky JOIN hodnoceni ON hodnoceni.clanek_id = clanky.id WHERE hodnoceni.created_at >= '2011-05-15' GROUP BY clanky.id HAVING count(*) >= 3 ORDER BY sum(hodnoceni) /count(*) LIMIT 5 na HAVING count(*) >= 3 mi pise nieco take cervene, ze sa mu tam nieco nepaci. Kde moze byt chyba? |
||
Kajman_ Profil * |
#7 · Zasláno: 22. 5. 2011, 21:23:49
Vypište to take cervene.
|
||
Časová prodleva: 13 let
|
0