Sumovani radku tabulky - mysql – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Sumovani radku tabulky - mysql – MySQL – Fórum – Programujte.comSumovani radku tabulky - mysql – MySQL – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
JumBo0
Newbie
23. 2. 2008   #1
-
0
-

Zdar,

Hledal jsem googlem, ale nic rozumneho jsem nenasel.
Daji se nejak sumovat jednotlive radky tabulky v mysql?
Mam tabulku s zaky a kazdy zak ma urcity pocet zaznamu se svymi body. Tuto tabulku bych potreboval seradit podle sumy jednotlivych zaku. S razenim neni problem, jenom nevim, jak vyrobit ten soucet u jednotlivych zaku (radku tabulky):
napr:
----------------------------------------
Login | pis1 | pis2 | pis3
-------------------------------
krajca| 0 | 6 | 5
novak| 10| 1 | 3
aust | 7 | 3 | 5

by se melo seradit takto:

aust | 7 | 3 | 5
novak| 10| 1 | 3
krajca| 0 | 6 | 5

Vim, ze neni tezke nacist tabulku a seradit ji podle radku az v php, ale da se takto serazena tabulka rozumne ziskat i nejakym mysql dotazem?

Nahlásit jako SPAM
IP: 89.103.145.–
Reklama
Reklama
Paja2
~ Moderátor
+2
Věrný člen
23. 2. 2008   #2
-
0
-

To JumBo : napiš sem prosímtě kod..

Nahlásit jako SPAM
IP: 88.146.215.–
JumBo0
Newbie
23. 2. 2008   #3
-
0
-

To Paja2 :

ok, zhruba takto:

mysql>
create table zaci (Login varchar (20), pisemka1 int, pisemka2 int);
-- tabulka s zaky, pocet sloupcu s pisemkama (pisemkaN int) neznam, jsou tvorene dynamicky
insert into zaci values ('Novak',10,12), ('krajca', 5,6), ('aust', 7, 2);
-- dejme tomu, ze mame tri zaky, kteri psali dve pisemky
select *, pisemka1+pisemka2 as body from zaci group by Login order by body asc;
-- vrati tabulku zaci serazenou podle poctu bodu jednotlivych zaku

problem je, ze neznam pocet ani jmena sloupcu s body (pisemka1, pisemka2), protoze jsou zadavany dynamicky uzivatelem.
v php bych to udelal tak, ze bych si vytahl jednoho zaka, zjistil si jmena a pocet sloupecku a vytvoril bych novou sql query, kde bych dosadil jmena sloupecku s pisemkama (za pisemka1, pisemka2, ...). To se mi ale nezda uplne idealni a radsi bych tu serazenou tabulku dostal jednim sql dotazem bez php. Ale zatim jsem nezjistil jak.

ps: nevim, jestli je priklad uplne syntakticky spravne, ale pro predstavu by to snad mohlo stacit

Nahlásit jako SPAM
IP: 89.103.145.–
23. 2. 2008   #4
-
0
-

To je chyba navrhu. Cele to predelej, o tomhle se nema cenu vubec bavit. Howgh.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
JumBo0
Newbie
23. 2. 2008   #5
-
0
-

To CommanderZ :

Skvele, to by me zajimalo, jak bys to predelal

Nahlásit jako SPAM
IP: 89.103.145.–
stepan0
Newbie
24. 2. 2008   #6
-
0
-

Jde o to, že počet písemek (testů nebo čehokoliv dalšího) je dán pevně počtem sloupců v tabulce. Co když tento počet budeš chtít zvětšit - to má uživatel aplikace smůlu? Špatný návrh je v tom, že se míchají jednotlivé entity do jedné tabulky.

Lépe by to vypadalo třeba takhle:
- student (id_studenta, jméno, příjmení atd.)
- test (id_testu, id_student, body atd.)

Řazení pak uděláš jednoduchým agragačním dotazem:

SELECT ts.id_studenta, sum(ts.body)

FROM test ts GROUP BY ts.id_studenta;
S testy lze samozrejmě dále pracovat a vytvořit například tabulku pro posis testu, která bude obsahovat informace o testu a kritéria vyhodnocení (prospěl-neprospěl, 1-2-3-4-5 atd.). Examinátor pak může změnit kritéria hodnocení na jednom místě a změna se projeví u všech studentů, protože v tabulce test jsou jenom body - jaké známce odpovídají by se udržovalo v popisu testu.

Nahlásit jako SPAM
IP: 213.192.60.–
JumBo0
Newbie
26. 2. 2008   #7
-
0
-

no ono je to o neco jednodussi. Uchovavam si jenom login studenta, ke kteremu pridavam znamky. Zadne jine udaje ke studentovi nez jeho login, ktery ho identifikuje, neukladam, takze mi prijde zbytecne mit dve tabulky. Pridavat nebo ubirat sloupecky neni problem, nactu nazev pisemky a podle neho Alter table pridam nebo uberu sloupecek. Znamky pocitam dynamicky v php. Zatim je to delane jen pro moji mamu, takze je to relativne jednoduche - mama pridava pisemky se znamkami a kdyz se zak prihlasi, tak se podle jeho loginu vypise znamka, to je vse.

Dotaz, ktery si vygeneruji v php podle poctu sloupcu vypada nejak takto:
SELECT `Login`, @1 := pisemka1, @2 := pisemka2, @3 := pisemka3, (@1+@2+@3) as amount FROM `9_A` GROUP BY `Login` ORDER BY amount DESC;

Nahlásit jako SPAM
IP: 85.160.72.–
Architekt0
Super člen
6. 3. 2008   #8
-
0
-

JumBo: Databáze není excel a neměl bys s ní jako s excelem pracovat. Používat ALTER v aplikaci pro úpravy sloupců je prasárna. ALTER existuje kvůli případům, kdy uděláš v návrhu databáze chybu nebo když rozšiřuješ aplikaci. Ale předem počítat s použitím ALTER se ti nejednou může pěkně vymstít.

Použij ten návrh co napsal stepan, nebo ještě lépe něco takového:

základní tabulky:
- student (id_student, login, ...)
- test (id_test, nazev, datum, ...)
a spojovací tabulka:
- hodnoceni (id_hodnoceni, id_student, id_test, body)

Select na to setřídění by vypadal takto:

SELECT id_student, SUM(body) FROM hodnoceni GROUP BY id_student ORDER BY SUM(body) DESC;


Tabulku se studenty tam zřejmě někde máš, tak si ji odmysli (id_student je zřejmě ten login). Tabulku test udělej určitě. Myslím že nikdo si za nějakou dobu nebude pamatovat, co to bylo za test ta "pisemka1", co byla "pisemka2", kdy se psala "pisemka3", atd. a jestli to má tvoje mamka někde na papíře poznačený, není lepší a bezpečnější místo než v databázi u toho testu ne? Stejně to bude studenty zajímat a když jim tam vypíšeš i název testu, případně kdy se psal, hned si vzpomenou, co to bylo a proč maj tak málo bodů :-) Princip spojovací tabulky určitě zachovej. Bude se ti to hodit, až budeš aplikaci rozšiřovat nebo až budeš navrhovat něco složitějšího.

Nahlásit jako SPAM
IP: 213.192.22.–
Python + Django + PostgeSQL = spokojený vývojář :-)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý