Autor Zpráva
greyscan
Profil
Zdravím všechny odborníky. Já začátečník, ale snažím se. Mám dotaz. Potřebuji z DB načíst hodnoty, které cečtu a seřadím dle podmínek do tabulky.
Mám toto: $query = MySQL_Query("SELECT SUM(body) AS celkem, oddil FROM turnaj".$id_i." GROUP BY oddil ORDER BY celkem DESC",$db);
To funguje. Sečte mi to všechny hodnoty bodů u oddílů a seřadí od největšího. Já bych ale potřeboval aby se mi sečetlo jen 10 nevětších záznamů a s tím se udělalo to co už mám. Poradí někdo?
Díky
Zechy
Profil
Na konec dotazu přidej LIMIT:
SELECT SUM(body) AS celkem, oddil FROM turnaj".$id_i." GROUP BY oddil ORDER BY celkem DESC LIMIT 10
juriad
Profil
greyscan:
Mimochodem, není úplně rozumné pojmenovávat tabulky v databázi turnaj1, turnaj2, turnaj3. Lepší je přidat do jediné tabulky turnaj jeden sloupec navíc, který bude jednotlivé typy turnajů rozlišovat. A v každém dotaze jen použiješ navíc podmínku WHERE, kterou určíš, o který typ turnaje ti právě jde. Má to výhodu v tom, že můžeš chtít provádět dotazy bez ohledu na to, jakého typu je turnaj.
greyscan
Profil
LIMIT sice dobrý, ale neřeší to můj problém, to jen omezí výpis na 10 položek. Zřejmě jsem to popsal špatně. Rozeberu to více.
V tabulce je více položek. Krom body a oddil taky jmeno a další věci. Každopádně, mám 15 jmen z jednoho oddílu a každé jméno má určitý počet bodů. Já potřebuji součet jen 10 nejvyšších bodů pro daný oddíl, těch zbývajících 5 ignorovat.
CZghost
Profil
greyscan:
Jestli chceš vypsat všechny položky a sečíst jen deset nejlepších, potom budeš muset použít dvojí volání z databáze.

První volání nech jak je: $query = MySQL_Query("SELECT SUM(body) AS celkem, oddil FROM turnaj".$id_i." GROUP BY oddil ORDER BY celkem DESC",$db);

Další volání bude jak navrhoval Zechy: $query = MySQL_Query("SELECT SUM(body) AS celkem, oddil FROM turnaj".$id_i." GROUP BY oddil ORDER BY celkem DESC LIMIT 10",$db); a ty hodnoty z pole potom pomocí cyklu sečteš a vypíšeš na konci tabulky (předpokládám, že jej vypisuješ do tabulky). Po použití proměnné ji klidně můžeš přepsat, vadit to nebude. Jestli ti to tak vadí, můžeš ji přejmenovat.
Kajman
Profil
greyscan:
Mysql to moc elegantně neumí. Možná by šlo použít jako základ Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení posledních pěti článků z každé kategorie (verzi s uživ. proměnnými) to obalit a nad tím použít teprve sum.

Pro verzi s korelovaným poddotazem, by se musel využívat ještě nějaký jedinečný sloupec a dotaz by to hodně zesložitilo.
greyscan
Profil
Díky CZghost. Zní to pěkně, ale jsem asi fakt natvrdlej. :) Nějak nechápu .... :(
Třeba jsem to jen vážně špatně vysvětlil nebo jsem úplně mimo. Je pravda, že poslední dobou mi to nemyslí.
Ale zkusím to ještě jednou.
jmeno / Oddil / Body
petr / oddil 1 / 3
jirka / oddil 1 / 5
martin / oddil 2 /4
Jde o to, že jména patří k oddílu a každé jméno má nějaký počet bodů. Součet bodů z každého oddílu dává výsledek. Já chci sečíst jen 10 nejvyšších bodů z každého oddílu. S uvedeným dotazem sečtu všechny body pro daný oddíl a s LIMIT 10 sečtu stejně všechny body pro daný oddíl, ale zobrazím jen 10 oddílů. Potřebuji zobrazit všechny oddíly (třeba 50) a u nich součet 10 nejvyšších bodů od jmen. Pokud se stále opakuji, tak se moc omlouvám, ale hledám nějaké řešení už pěkně dlouho a začíná mi vynechávat hlava.

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: