Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

Zdravím,

mám dvě tabulky. V jedné mám data s "předměty" a v druhé mám hodnocení uživatelů na tyto předměty. Druhá tabulka je zařízena tak, že každý řádek znamená hodnocení jednoho uživatele.
Teď bych ale potřeboval vytáhnout nejlépe hodnocené "předměty". Prvně jsem chtěl udělat SELECT dotaz pro každý předmět, ale to by dotazů bylo příliš a nebylo by to zrovna nejrychlejší.
Pak mě napadlo při každém hodnocení uložit i do první tabulky políčko "Hodnocení". Aktualizovalo by se při každém novém hodnocení a snadno by se to tahalo z tabulky.

Jaký na to máte názor vy? Jak bych to měl udělat?

Odpovědět 5.2.2014 19:22
Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

Teď mě ještě napadá, že by to šlo dotazem.

Mám tyto řádky:

id: 1, name: Blabla, item: 1
id: 2, name: Blabla 2, item: 1
id: 3, name: Blabla 3, item: 2

A potřebuju získat řádky s největším počtem jednoho ID item. V tomto případě první dva řádky, protože jsou dva, zatímco item 2 je jen jeden. Šlo by to nějak?

Nahoru Odpovědět 6.2.2014 7:47
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Mělo by jít něco jako:

SELECT *
FROM predmet
JOIN hodnoceni USING (predmet_id)
GROUP BY predmet_id ORDER BY body DESC
Nahoru Odpovědět 6.2.2014 9:24
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:
| id    |series | author | value |
|--------------------------------|
| 5     | 2     | 1      | 5     |
| 6     | 2     | 8      | 4     |
|--------------------------------|

Problém je, že tabulka s hodnocením vypadá nějak takto a ten předmět má tedy víc hodnocení od různých uživatelů.

Editováno 6.2.2014 10:02
Nahoru Odpovědět 6.2.2014 10:01
Avatar
Paul
Člen
Avatar
Odpovídá na Inoue Yūki
Paul:

Jestli tě správně chápu, šlo by to udělat pomocí vnořenýho dotazu. Vyber všechno z tabulky XXX kde item = (Vyber item, který se v tabulce YYY objevuje nejvíckrát).

 
Nahoru Odpovědět 6.2.2014 10:22
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Paul
Inoue Yūki:

Ono ale bohužel nejde o to, kolikrát se objeví, ale o průměr sloupce value.

soucet_value / pocet_prvku

Dalo by se to nějak udělat v MySQL?

Nahoru Odpovědět 6.2.2014 10:56
Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

Česky by ten příkaz zněl asi takto: Vyber pět řádků z tabulky series, které mají největší průměrné hodnocení z tabulky ranking.

Nahoru Odpovědět 6.2.2014 11:22
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Vždyť jsem ti psal jak to udělat.

Nahoru Odpovědět  +1 6.2.2014 12:11
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

Ano, ale tvoje řešení nepočítá s nevyšší průměrnou hodnotou. Nebo počítá a já to tam nevím, to se pak omlouvám. :)

Nahoru Odpovědět 6.2.2014 12:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Nic o průměru jsi v dotazu nepsal. Si to uprav, každopádně budeš používat GROUP BY.

Nahoru Odpovědět 6.2.2014 12:45
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

Na MySQL nejsem moc zručný. Můžeš mi ukázat, jak by to mohlo vypadat?

Nahoru Odpovědět 6.2.2014 13:00
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Inoue Yūki
Petr Nymsa:

Průměr máš pomocí funkce AVG(). Stačí trošku pročíst dokumentaci, navíc i zde to je popsané

Nahoru Odpovědět 6.2.2014 13:06
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Já taky ne :P Nějak takhle by to mohlo jít:

SELECT predmet_id, AVG(body) as prumer
FROM predmet
JOIN hodnoceni USING (predmet_id)
GROUP BY predmet_id
ORDER BY prumer DESC
LIMIT 10;
Nahoru Odpovědět  +1 6.2.2014 13:07
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

Díky, už se si začal zavařovat mozek. :D

Nahoru Odpovědět 6.2.2014 13:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
David Čápka:

Není zač, alespoň jsem si ho taky provařil, je to zdravý :D

Nahoru Odpovědět  +1 6.2.2014 13:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na David Čápka
Inoue Yūki:

:D Asi si znova přečtu něco o SQL, tohle mě vystrašilo. :D

Nahoru Odpovědět 6.2.2014 13:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.