Pouze tento týden sleva až 80 % na e-learning týkající se JavaScriptu. Zároveň využij akce až 30 % zdarma při nákupu kreditů. Více informací:
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:5.2.2014 19:22

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
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:6.2.2014 7:47

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
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:6.2.2014 9:24

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
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Neaktivní uživatel:6.2.2014 10:01
| 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
Neaktivní uživatelský účet
Avatar
Paul
Člen
Avatar
Odpovídá na Neaktivní uživatel
Paul:6.2.2014 10:22

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
Odpovídá na Paul
Neaktivní uživatel:6.2.2014 10:56

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
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:6.2.2014 11:22

Č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
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:6.2.2014 12:11

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

Nahoru Odpovědět
6.2.2014 12:11
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:6.2.2014 12:17

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
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:6.2.2014 12:45

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
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:6.2.2014 13:00

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
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Nymsa:6.2.2014 13:06

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 Neaktivní uživatel
David Čápka:6.2.2014 13:07

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
6.2.2014 13:07
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:6.2.2014 13:17

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

Nahoru Odpovědět
6.2.2014 13:17
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:6.2.2014 13:34

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

Nahoru Odpovědět
6.2.2014 13:34
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:6.2.2014 13:48

: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
Neaktivní uživatelský účet
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.