| Autor | Zpráva | ||
|---|---|---|---|
| greyscan Profil |
#1 · Zasláno: 8. 5. 2014, 22:10:23
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 |
#2 · Zasláno: 9. 5. 2014, 00:30:33
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 |
#3 · Zasláno: 9. 5. 2014, 00:34:03
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 |
#4 · Zasláno: 9. 5. 2014, 06:36:18
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 |
#5 · Zasláno: 9. 5. 2014, 08:09:20
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 |
#6 · Zasláno: 9. 5. 2014, 08:33:25
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 |
#7 · Zasláno: 10. 5. 2014, 00:37:07
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. |
||
|
Časová prodleva: 12 let
|
|||
0