Autor | Zpráva | ||
---|---|---|---|
Lonanek Profil |
#1 · Zasláno: 11. 1. 2016, 19:31:17
Řeším dilema sčítání položek tabulky.
TAB1 obsahuje výkony hráčů TAB2 obsahuje jejich data. SELECT TAB1.*, SUM(TAB1.vykon), TAB2.* FROM TAB1 JOIN TAB2 ON TAB1.id=TAB2.id WHERE podminka GROUP BY TAB1.den, TAB1.termin HAVING SUM(TAB1.vykon) Lze ještě dotaz upravit tak, abych získal obě jména a správný součet výkonů? Návrh TAB1 původně počítal pouze s výkony jednotlivců a zadavatel nyní požaduje výkony dvojic. Je lepší sčítání výkonů řešit na úrovni databáze, nebo na úrovni scriptu s novou tabulkou součtu obou? Díky za nakopnutí. |
||
Kajman Profil |
#2 · Zasláno: 12. 1. 2016, 09:40:46
Použijte dva dotazy. Např. jeden na sečtení výkonů obou hráčů a druhý na jejich identifikaci.
|
||
Lonanek Profil |
Díky za reakci, ale obávám se, že to nebude to pravé řešení.
Pokud v prvním dotazu zjistím jména hráčů a v druhém součet obou hráčů, vždy uvidím id pouze jednoho, takže správné přiřazení do dvojice by nemuselo být správné. Jednodušší zřejmě bude vytvořit novou součtovou tabulku a tu plnit scriptem podle zadaných výsledků, i to bude tak trochu oříšek. Jak jsem psal, bohužel původní tabulka není správně navržena pro tyto účely. |
||
Kajman Profil |
#4 · Zasláno: 13. 1. 2016, 12:19:42
Lonanek:
„správné přiřazení do dvojice by nemuselo být správné“ Myslel jsem, že dotaz vrátí vždy součty pro jednu dvojici omezenou díky where. Můžete tedy lépe popsat strukturu tabulek a jejich data? |
||
Lonanek Profil |
Zjednodušený popis struktury tabulek:
Tabulka výkonů (sto_hs_dvojice): id, id_termin, hrac, vykon, ... Tabulka termínů (turnaje_termin): idtt, id_hrace, draha, datum, cas_od, cas_do, ... Pro potřeby výkonů jednotlivců byl návrh tabulky dostačující. Kajman: „Myslel jsem, že dotaz vrátí vždy součty pro jednu dvojici omezenou díky where.“ Na to není struktura stavěná. Každý hráč je zapsán samostatným výkonem a jediné pojítko je datum a čas startu. --------- Tedy celý dotaz je pak: SELECT h.jmeno, h.prijmeni, h.klub, s.registrovany, s.rocnik, SUM(s.vykon) AS vykon FROM turnaje_termin AS t LEFT JOIN sto_hs_dvojice AS s ON t.idtt=s.id_termin JOIN hraci AS h ON h.idh=s.hrac WHERE s.stav='1' AND s.hrac=h.idh GROUP BY t.datum, t.cas_od, t.cas_do HAVING SUM(s.vykon) ORDER BY s.rocnik DESC, vykon DESC |
||
Kajman Profil |
No, ideální to není, ale data asi půjde vysosat (pokud tam nebudou kolize více lidí se stejným startem).
Buď půjde group by nad termíny a tabulku s výkony hráčů připojit dvakrát, jednou s min(id_hrace) a jednou s max. Nebo tabulku termínů spojit se sebou samou, se stejným časem ale vyšším id_hrace, žáleží, zda z termínů potřebujete i nějaké jiné sloupce různé pro oba hráče. |
||
Lonanek Profil |
No vzhledem k tomu, že přibyly další požadavky jako je statistika, kontrola startu, zda dvojice nenastoupila 2x, rozdělení podle kategorií (regi, neregi) bude asi schůdnější vše vyřešit scriptem do samostatné tabulky výkonů celé dvojice a z té pak cucat potřebná data.
Ukázka v praxi zde Průběžné výsledky. Kajman: Díky za pomoc. |
||
Časová prodleva: 9 let
|
0