NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
Avatar
caca
Člen
Avatar
caca:10.6.2018 19:43

Dobrý den,
potřeboval bych poradit s herni databazí v DB Browser for SQLite.
Zda by mi mohl někdo dát radu na to jak udělat strom jako je :
Liga > tým (> pod tým ) > Hráči a presonál
Ono tam toho bude samozřejmě víc na poskládání, ale zatím nemám tušení s čím začít.

potom zda je možné udělat součet daných attributů, nebo i součet děleno číslem.
taky jestli je možnost dát hodnotu nějakému termínu, který si sama databáze vypočítá (jako že při dosažení nějaké hodnoty z vybraných třeba pěti - samo určí daný termín.)

 
Odpovědět
10.6.2018 19:43
Avatar
Neaktivní uživatel:10.6.2018 20:42

Napiš jak to celé má fungovat, a co s toho má vzniknout.

Nahoru Odpovědět
10.6.2018 20:42
Neaktivní uživatelský účet
Avatar
caca
Člen
Avatar
caca:10.6.2018 22:53

OK...udelam tabulky leagues, teams, players..atp...
a pak v db chci pripsat players pod nejaky team, takze to musim pripsat pres nejaky kod, ze? je asi blbost dělat hráče, už v tabulce teams

Pak třeba budu mít třídu attributů kde budou čísla od 1-20..a budu chtít sečíst ty čísla a výsledek byl měl být třeba od 280-340, dál budu chtít třeba pět tříd těch attributů sečíst a výsledek by měl být mezi 1-100, ale třeba když budu chtít sečíst jen čtyři tak výsledek bude mezi 50-80 a tam potřebuju to konečný číslo vydělit 4kou a vykrátit 5ti.

A poslední je, že budete mít nějaký daný termín, který bude mít čísla součtu pěti kategorii 80,70,60,60,40 (termín 1) nebo 70,70,60,60,80 (termín 2) a při překročení těchto čísel se určí sám výsledek v podobě termínu 1-2.

 
Nahoru Odpovědět
10.6.2018 22:53
Avatar
Odpovídá na caca
Michal Štěpánek:10.6.2018 23:35

Z toho popisu jsem zmatenej, jak lesní včela.
Tabulky mezi sebou provážeš buď přidáním FK (cizího klíče) s vazbou na danou tabulku (pro vazbu 1:N), nebo vazební tabulkou (pro vazbu M:N)
Jaká čísla chceš sčítat, dělit a krátit a proč? Co má být výsledkem? Co vlastně potřebuješ ukládat a zobrazovat?

Nahoru Odpovědět
10.6.2018 23:35
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
caca
Člen
Avatar
caca:11.6.2018 0:28

No, každý attribut v hře máš vyjádřený číslem...sečtením dojdeš k číslu Overall je to jako máš v hře CA/PA tedy celkouvou hodnotu hrace...

v druhém případě..sečtením třeba pěti tabulek budeš mít Overall číslo k Skating, Defense atp.. když budeš mít v pěti tabulkách číslo 20 bude Overall 100, ale když budu pootřebovat jenom čtyři bude overall 80 proto potřebuju tohle číslo vydělit 4 a vynásobit 5 aby číslo bylo taky 100.

a k tomu třetímu, jsou ty termíny...a to máš to když Skating nebo Defense + plus další budeš mít po pěti overall součtech 80,70,60,60,40 nebo 70,70,60,60,80 (kde muže mít několiset možností)...aby teda sáma ta databáze stanovila výsledek v podobě termínu...jakože příklad
80,70,60,60,40 - kde 80 je defense. Takže překročením hodnoty 80 a ostatních bude třeba termín Defense player..

PS: ještě k tomu svázání těch tabulek...někde nějaký návod by nebyl? určítě na to nějak příjdu, ale i tak by se hodil....

 
Nahoru Odpovědět
11.6.2018 0:28
Avatar
Odpovídá na caca
Michal Haňáček:11.6.2018 7:00

No přiznám se, že ani po tom co jsi tady popsal to sčítání a odčítání a dělení a cosi dalšího vůbec nechápu proč chceš tyhle operace dělat, kdy a za jakých podmínek, ale to máš asi nějak namyšlené.

Veřím, že jsi natolik gramotný, že dovedeš samostatně používat google aby sis nějaký ten návod co by jich byl plnej internet našel, ale protože je hezké ráno, tak ti odkaz na jeden z mnoha posílám

Nahoru Odpovědět
11.6.2018 7:00
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Neaktivní uživatel:11.6.2018 7:21

Podle prvního komentáře jsem usoudil že to asi má být na Windows. Jak to budeš aktualizovat na všech počítačů. Nebylo by to lepší na web?

Nahoru Odpovědět
11.6.2018 7:21
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Haňáček:11.6.2018 8:08

To je rada, která mu s cizími klíči, potažmo databázemi celkově skutečně pomůže :-`

Nahoru Odpovědět
11.6.2018 8:08
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:11.6.2018 14:38

Asi bych ty data zpracoval v nějakym skriptu a do db bych vkládal už finální hodnoty. Tabulky a potřebný vazby mezi nima snad zvládneš vytvořit a jestli ne, tak tady je určitě nějakej návod, co se věnuje návrhu databáze

 
Nahoru Odpovědět
11.6.2018 14:38
Avatar
caca
Člen
Avatar
caca:11.6.2018 17:01

OK, tak dík ono jde spíš o to, že je to databáze pro hru a tyhle operace bude muset dělat ta hra tak i tak....jenom jsem chtěl vědět zda je to možný udělat už v db? třeba v exelu už to mam před připravený, ale mam v exelu jenom část a myslel jsem, že by to v ty db fungovalo na stejným principu. Jako naházet tam attributy a součty už udělá sama db jako to můžeš udělat v exelu abych to nemusel vypisovat znova.

 
Nahoru Odpovědět
11.6.2018 17:01
Avatar
caca
Člen
Avatar
caca:11.6.2018 17:34

Jinak pro ty co nechápou....
budu mit kolonku - Speed (s číslem 1) a kolonku s Agility (s číslem 1) a chci v db mít kolonku s Skating (což je součet 1+1) aby v této kolonce bylo tedy: číslo 2.

 
Nahoru Odpovědět
11.6.2018 17:34
Avatar
caca
Člen
Avatar
caca:11.6.2018 18:45

u toho dělení je to např. Speed (s číslem 1) a kolonku s Agility (s číslem 1) + další dvě kolonky s číslem jedna takže výsledek by měl být : Skating (součet 1+1+1+1 = 4) a ja potřebuju 4 vydělit 4kou a násobit 5ti a výsledek bude tedy Skating = 5.

Nevím jakou zkušenost máte s herní databázi? Ale je to kvůli tomu, že se db bude postupně aktualizovat a bylo by těžké aktualizovat třeba 50 000 userů

 
Nahoru Odpovědět
11.6.2018 18:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.6.2018 11:21

Precetl jsem si par zpravicek, ne vsechno, prilis cteni :) Asi si predstavujes db nejak jinak. Tabulky v db jsou jenom tabulky s udaji. Nic vic. Vsechny ostatni operace musi delat tvuj program. Treba na zaklade sql prikazu.
Excel pro zmenu nema databazi. Ale mas tam tabulku i s programem.

Cili, vemes data (x-y tabulku), ulozis do db. Prectes data, zpracujes, ulozis do db.
Je mozne pouzit sadu funkci, ktera pri cteni z db jeste data upravi.
Ano, je mozne pocitat ty vysledky, jak to popisujes. Sql prikaz by byl treba

SELECT
    sloupecA,
    sloupecB,
    SUM(sloupecC) AS soucet,
    COUNT(sloupecD) as pocet
FROM
    tabulka
GROUP BY
    sloupecE

Vezmi tabulku, spoj radky podle sloupecE, secti jejich sloupce C do 'soucet', vytvor pocet spolecnych radku sloupecD do 'pocet'.
Samozrejme tam muzes udelat rovnou cely vzorecek SUM(sloupecB)/CO­UNT(sloupecC) as vysledek.
A ted, co s tou tabulkou dal udelas, bys resil az dalsim sql prikazem. Tabulka ted vypada treba

sloupecA, sloupecB, soucet, pocet
sloupecA, sloupecB, 2, 3
0, 1, 2, 3
sloupecA, 0, sloupecB, 1, soucet, 2, pocet, 3

AS = alias, je dobre ten sloupec pojmenovat, jinak dostane jen cislo v poradi a vypadalo by to takto. U sql mas 3 moznosti formatovani tabulky. Ciselne sloupce, jmena sloupcu a nebo spojeni obou. Nejsem si ted uplne jisty, kdyz zvolis names, jestli ti to ocisluje, kdyz tam nemas alias, ale myslim si to :)

Editováno 12.6.2018 11:22
 
Nahoru Odpovědět
12.6.2018 11:21
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.6.2018 11:24

Jo, v SQL prikazu mu muzes propojovat vic tabulek. Proste je tam strasne moc moznosti. Da se napsat i procedura (funkce), ktera neco dela. Takovy program, zkratka. Cili, to, co chces, tam jde. Otazka je, zda se ti chce googlovat, jak to zapsat jako sql prikaz nebo je pro tebe jednodussi nektere veci resit pres programovaci jazyk (php), treba.

 
Nahoru Odpovědět
12.6.2018 11:24
Avatar
caca
Člen
Avatar
caca:13.6.2018 22:57

Moc dík za rady, zatím nebyl moc čas se k tomu dostat, ale i tak nějak nevim jak to nastavit v tom SQL. Kde je ta funkce kam napsat ten prikaz aby treba ty tabulky dělali co maj dělat..
problém bude v tom, že s SQL nemam žádny zkušenosti.

 
Nahoru Odpovědět
13.6.2018 22:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.6.2018 8:02

Sql je jen tabulka. Kdyz pouzijes pojem 'nastaveni', tak, u tabulky toho moc nastavovat nejde. CHARSET, ENGINE a par dalsich veci. Ty funkce, vsechno, to jsou sql prikazy, zadna nastaveni. Pr. pseudo-kod:

sql->connect('server')
sql->login('user', 'psw')
sql->selectDb('db') // nekdy vsechny 3 prikazy jsou v jednom connect
result = sql->query('SET NAMES UTF-8') // sql prikaz pro zmenu kodovani pro dalsi sql prikazy
result = sql->query('SELECT id, user_name FROM users WHERE user_name='aaa' AND user_psw='bbb') // nastav kodovani
result = sql->query('INSERT ...')
result = sql->query('UPDATE...')
result = sql->query('DELETE... ')
sql->disConnect()

Pripojis se k nejakemu sql serveru (program sql bezici na serveru). Nalogujes. Presunes se do databaze. A pak uz jen pracujes s tabulkami. Vyber radky z tabulky (SELECT), zmen radek/y (UPDATE), pridej radek/y (INSERT), smaz radek/y (DELETE). Nic vic. Jsou dalsi prikazy, ale nejvic pouzivas tyhle.
A pri tom vyberu i ukladani muzes data ruzne preformatovat. Ale nejcasteji pri vyberu. Mas tam treba v tabulce 30 sloupcu. Chces z ni jen tri + dalsi dva zpracovane nejakym vzoreckem. Chces to spojit podle stejnych hodnot. Filtrovat podle podminek. Vybrat jen prvnich 10 radku. Muzes tam propojit data z ruznych tabulek (treba mas ciselnik mest: id, nazev mesta, poloha; A v hlavni tabulce mas jen id radku z tohoto ciselniku. Ale uzivateli chces zobrazit jmeno mesta) A sql ti pak posle tabulku, kterou uz si nejak zobrazis uzivateli. Nejlepe je pouzivat jednoduche prikazy. Ty sql prikazy jsou jednoduche a doslovne. jenom nekdy jsou komplikace, kdyz si vymyslis nejake specialni filtry, tak musis vymyslet, jakymi sql funkcemi se to da vyresit (tech je asi 100, jine by sis musel napsat jako PROCEDURE).

Pr

SELECT -- Vyber sloupce...
    sloupecA,
    sloupecB,
    SUM(sloupecC) AS soucet,
    COUNT(sloupecD) as pocet
FROM -- ... z tabulky ...
    tabulka
GROUP BY -- ... a spoj podle stejnych udaju sloupcu ...
    sloupecE

A kdyz to teda zrovna propojujes pres GROUP, tak obvykle chces neco spocitat. Napr jako ve tvem pripade. Mas uzivatele, ktery odehraje 5 her. Jineho, ktery jen 3. A chces jim nejspis spocitat prumerne skore

SELECT
    user_name,
    SUM(vysledek) / COUNT(user_name) AS vysledek
FROM
    odehrane_hry
GROUP BY
    user_name

Predstav si to, jakoze ti nejdriv vybere tabulku

SELECT
    user_name,
    vysledek
FROM
    odehrane_hry

A pak ji filtruje tak, ze kdyz najde stejne jmeno, ktere uz v tabulce ma, tak ten radek zahodi. A nez ho zahodi, muzes data predat funkcu, napr SUM, ktere udela soucet x = x + vysledek. Nebo COUNT, ktera pocita y = y + 1.
Cili, kdyz tam budou 3 radky od jednoho hrace, tak x = 5 + 2 + 4, y = 1 + 1 + 1, prumerne skore je tedy 11 / 3. Do SELECT pak das vzorecek, kdyz to chces mit jako jeden sloupecek vystupu.

Editováno 14.6.2018 8:05
 
Nahoru Odpovědět
14.6.2018 8:02
Avatar
caca
Člen
Avatar
caca:14.6.2018 13:21

OK. dík moc...me vlastne slo o to aby ty soucty byli lepsi pro orientaci primo v tý db...
ted uz chapu, ze to nejde...bud muzu ty soucty asi napsat rovnou do tabulky ze si to spocitam sam jinak mam smulu ze?

jde o databazi pro hru...tudiz jsem potreboval tyhle udaje ktery mam v exelu mit i v db...protoze potrebuju to na test s GUI. ty funkce bude lepsi uz nastavovat pri v nakym programu, nebo to vymyslet jeste jinak..

 
Nahoru Odpovědět
14.6.2018 13:21
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.6.2018 14:19

Jde to zapsat do tabulky. Sql prikazy je mozne kombinovat. Pripadne udelat tu proceduru.

Zatim jsi nedal zadne konkretni udaje, takze se neda resit. Ale, jak jsi psal, chtel jsi ziskat zatim jen info.

google = insert into more row sql example

INSERT INTO MyTable ( Column1, Column2, Column3 )
VALUES ('John', 123, 'Lloyds Office'),
('Jane', 124, 'Lloyds Office'),
('Billy', 125, 'London Office'),
('Miranda', 126, 'Bristol Office');

google = insert into select sql

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2, 8, 'some string etc.'
FROM    table2
WHERE   table2.ID = 7;

google = update select sql

-- s timhle jsem se zatim nesetkal, ale mozna to take pujde
UPDATE
  tgt
SET
  Column1 = src.Column1,
  Column2 = src.Column2,
  Column3 = src.Column3,
  ...
FROM
  dbo.TargetTable AS tgt
  INNER JOIN
  (
    VALUES
    (1, 'a', 'k', 'x', ...),
    (2, 'b', 'l', 'y', ...),
    (3, 'c', 'm', 'z', ...)
  ) AS src (ID, Column1, Column2, Column3, ...)
    ON tgt.ID = src.ID
 
Nahoru Odpovědět
14.6.2018 14:19
Avatar
caca
Člen
Avatar
caca:14.6.2018 23:07

Moc dík za ochotu...posilam obrazek _ https://abload.de/…ql1kck38.png
Kde je více info

Kde ten soucet by melo byt to skating (z tech 5ti predchazejicich) kde techto souctu bude nakonec podobnych vice ale jako zaklad to staci...akorat vubec nevim jak to v tom SQL programu nastavit....

 
Nahoru Odpovědět
14.6.2018 23:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15.6.2018 8:13
SELECT
    name, lastname, Acceleration, Agility, Balance, Speed, Stamina,
    SUM(Acceleration, Agility, Balance, Speed, Stamina) / COUNT(Acceleration, Agility, Balance, Speed, Stamina) AS Skating
FROM
    Players

Mozna to bude treba napsat sloziteji, nezkousel jsem to. Mozna jako scitani.

 
Nahoru Odpovědět
15.6.2018 8:13
Avatar
caca
Člen
Avatar
caca:15.6.2018 14:05

dík zkoušel jsem to a bohužel to nefunguje...a vlastně když to otestuju sql radku jak to pak vlozim do ty tabulky?

 
Nahoru Odpovědět
15.6.2018 14:05
Avatar
caca
Člen
Avatar
caca:18.6.2018 15:24

Opravdu si nevím rady jak to udělat...nebylo by tu nějaké řešení?

 
Nahoru Odpovědět
18.6.2018 15:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19.6.2018 14:48

No, ten dotaz bude asi slozitejsi. Nejsou jasne ale podminky, takze se da velmi tezko radit konkretne. Zkus googlovat a kombinovat jmenovane funkce.
(Acceleration+A­gility+Balance+Spe­ed+Stamina) / (1+1+1+1+1) AS vysledek
Pripadne tam dat nejake IF NOT NULL do te druhe zavorky. To netusim, jak to vypada v db, zda tam mas vzdy nejakou hodnotu nebo, zda tam muze byt i NULL.

 
Nahoru Odpovědět
19.6.2018 14:48
Avatar
caca
Člen
Avatar
caca:19.6.2018 16:45

NULL bude jen v pripade rozdilu attributu u brankaru a hracu....ale na tohle to nema vliv..ten AS vysledek se bude lisit vlastne kterej ten vysledek budes potrebovat...pro jaky attributy..muzes mit soucet vsechy attributu pro brankare a hrace...

vlastne kdyz bude fungovat (Acceleration+A­gility+Balance+Spe­ed+Stamina) / (1+1+1+1+1) AS vysledek
tak to bude funkcni asi u vseho....navic ja s SQL moc zkusenosti nemam tak mi asi nezbude nic nez nekoho zaplatit ...

 
Nahoru Odpovědět
19.6.2018 16:45
Avatar
caca
Člen
Avatar
caca:19.6.2018 19:49

tak jsem prisel jak secist sloupce, ale ne jak řádky do konečný tabulky

 
Nahoru Odpovědět
19.6.2018 19:49
Avatar
caca
Člen
Avatar
caca:19.6.2018 20:36

uz jsem na to prisel... jsou tam pluska misto carek :DD

 
Nahoru Odpovědět
19.6.2018 20:36
Avatar
caca
Člen
Avatar
caca:19.6.2018 20:40

ted jak to reseni vlozit v SQL....aby se zapsalo do tabulky??

 
Nahoru Odpovědět
19.6.2018 20:40
Avatar
caca
Člen
Avatar
caca:19.6.2018 21:06

vlastne kdyz je (Acceleration+A­gility+Balance+Spe­ed+Stamina) tak vse funguje jak ma

ale kdyby bylo jen (Acceleration+A­gility+Balance+Spe­ed) a chtel bych to vydelit 4kou a vynasobit 5kou - tak reseni neznam...

 
Nahoru Odpovědět
19.6.2018 21:06
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.6.2018 9:12

'kdyby bylo'
A to je presne to, co mi do ted neni jasne. Podle ceho urcujes, ze jsou tam jen 4 vyplnene? V tom obrazku takovy pripad neni. Bud je hodnota tedy NULL nebo '' nebo ' '.
Pokud to tak je, pak tam budes muset dat ty if. Select se desne zkomplikuje, ale jinak to nejde. Ale, kdybys to nemel takhle v jedne tabulce, tak by to slo resit tim grupovanim (GROUP BY).

https://abload.de/…ql1kck38.png

https://stackoverflow.com/…ot-null-only

COALESCE(lastname,'N/A')
IFNULL(lastname,'') AS lastname,

https://stackoverflow.com/…-server-2005

SELECT  (ISNULL(Val1,0) + ISNULL(Val2,0) + ISNULL(Val3,0)) as 'Total'
FROM Emp

insert into emp select emp_cd, val1, val2, val3,
(val1+val2+val3) as total
from emp;
 
Nahoru Odpovědět
20.6.2018 9:12
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:20.6.2018 13:17

Řešení, tak jak ho popisuješ, porušuje normální formy databáze. Sloupce by měly být na sobě nezávislé. Ty máš řekněme 4 na sobě nezávislé sloupce a pak tam chceš mít další, který je na nich závislý. Hodnoty které chceš vypočítávat ze zbylých sloupců bys v tabulce vůbec mít neměl, ale měl bys je získávat buď v programu z načtených dat z DB nebo už v SELECTu z DB. Tak jak to myslíš ty, bys musel při každé změně nějakého atributu přepočítat ten závislý atribut.

 
Nahoru Odpovědět
20.6.2018 13:17
Avatar
caca
Člen
Avatar
caca:20.6.2018 18:38

ok popisu to trochu lepe.....

tady je to ok..skating muze mit hodnotu od 5-100.. https://abload.de/img/17xszu.png (obrazek1)

ale v tomhle pripade....muze mit defesive hodnotu jen od 5-80.....protoze se sklada jen ze 4 attributu, ale ja potrebuju samozrejme dosahnout vysledku, ktery presahne hodnotu 80...aby to konecne cislo bylo regulerne podobne jako u 5 attributu a proto se musi delit(4) a nasobit(5).

https://abload.de/img/3m7knp.png (obrazek 2)

kde v prvnim pripade je defensive 58 ale kdyz ji vydelite 4kou a vynasobite 5kou melo by to byt 72....v tom druhem zase je 64 ale kdyz ji vydelite 4kou a vynasobite 5kou melo by to byt 80...

doufam, ze to chapete co se snazim vysvetlit?


posledni otazka je jak vlozim v datech ten vysledek z prvniho obrazku do tech tabulek..v tomto obrazku?

https://abload.de/img/2ygsry.png (obrazek 3)

 
Nahoru Odpovědět
20.6.2018 18:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21.6.2018 8:38

3. vlozim - Prikaz INSERT nebo UPDATE
https://www.tutorialspoint.com/…te-query.htm
Jestli to chces v jednom prikazu, tak je to trosku komplikovanejsi. Mohlo by to vypadat nejak takhle

UPDATE t1, (SELECT ... ) t2
SET t1.skating = t2.skating
WHERE t1.skating=null and t1.player=t2.player;

Pridas si to k update jako tabulku a pak s tim pracujes dal jako s tabulkou. Ale nemam to testovane, mozna se to zapisuje malinko jinak.


2. defesive - Mas jako 2 tabulky v jedne? A nemuzes pro kazdou tabulku pouzit SELECT zvlast?

Editováno 21.6.2018 8:40
 
Nahoru Odpovědět
21.6.2018 8:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21.6.2018 8:52

Uz jsem to zminil a pise to i P. Langer. Ono, uz od zacatku je spatne, pokud tam mas 2 tabulky v jednom, ze uvazujes excelove. Tim se ti pak vsechny sql prikazy desne komplikuji. V SQL musis mit jasnou tabulku X-Y. Nelze si natahovat delku radku, jak se ti chce. A pokud to delas, tak bys mel vedet, s kolika sloupecky pracujes, jinak bude sql prikaz komplikovany a plny IFu.

Ve tvem pripade by bylo lpsi to rozepsat na zvlast tabulky.

players: id_player, name, surname
schopnosti: id_schopnost, name
schopnosti_hraci: id_player, id_schopnost, value

cili

players
1, Alex, O.
schopnosti:
1, Agility
2, Acceleration
schopnosti_hraci
1, 1, 17
1, 2, 17

Atd, kazda schopnost zvlast a slo by to pak pekne propojit pomoci LEFT JOIN a grupovat pres GROUP BY. Mozna, ze by byly sql dotazy mene prehlednejsi, ale mohli by fungovat treba 4x rychleji. Coz by se vyplatilo pro vic nez 1000 hracu, treba. Jinak si asi na rychlost stezovat nebudes.

 
Nahoru Odpovědět
21.6.2018 8:52
Avatar
Odpovídá na Peter Mlich
Michal Haňáček:21.6.2018 10:17

Ty jsi čaroděj, já až teď pochopil čeho chce caca vlastně dosáhnout :-D .

Nahoru Odpovědět
21.6.2018 10:17
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Michal Haňáček
Peter Mlich:21.6.2018 10:33

Nahoda :) Hodne pomohly obrazky, co posila. Jako, od zacatku jsem zhruba tusil, co chce, jen jsem nevedel, jak ma strukturovane tabulky. Tak jeho dotazy nedavaly prilis smysl. Ted to chapu tak, ze ma tabulku neco jako toto:

jmeno, acc, agi, sta, | def, hit, shoot
Alex, 17, 17, 12, null, null, null - nebo mozna...
Alex, 17, 17, 12, 4, 5, 6

Coz je sice cool pro excel, ale v sql se s tim dost spatne pracuje.
Podle jednoho obrazku je videt, ze dela sumu pres group by player.name. Takze tam ma vic radku se jmenem Alex? A ted nevis, co tam ma vlastne vyplnene pro ty dalsi sloupce. Podle tech dvou obrazku to vypada, ze ma 2 ruzne tabulky, coz by bylo ok. Ale, podle toho, co pise, to ma vsechno v jedne. tak, ja nevim, uz :)
A nebo zatim nema jasno, jak to navrhnout do sql a mozna to udela nakonec ve dvou tabulkach, aspon.

Chce spocitat sumu(sloupcu) / pocet(sloupcu).
Pokud 2 tabulky dal do jedne, tak jedna ma sloupce 4, druha 5. Tak ja to vidim na 2 rozdilne sql dotazy. A on by to chtel stale resit jednim :) Ne, ze by to neslo, ale bylo by to plne tech COLEASE nebo IF. Ten sql dotaz se mi nechtelo vubec pokouset konstruovat.
Jak popisuje, kdyby pouzil 1 univerzalni dotaz bez COLEASE, tak bude muset vysledky prepocitavat. A navic to ani tak nejde, matematicky :)

Editováno 21.6.2018 10:35
 
Nahoru Odpovědět
21.6.2018 10:33
Avatar
caca
Člen
Avatar
caca:21.6.2018 15:29

No tak ted jsem se v tom trochu ztratil, ale rozhodne nemam dve tabulky...
normalne chci mit jednu tabulku players - a v ni vsechny potrebny udaje co kazdy hrac mam mit
at uz to jsou informacni udaje (rok narozeni, tym, pozice atp..) nebo attributy, kterych je kolem cca 30.

akorat jsem chtel mit k tomu jeste soucty tech attributu (jako skating, defesive atp.) kvuli prehlednosti kdyz se pak nektere attributy meni podle vyvoje hrace

to opravdu musim vsechny ty udaje nejak rozdelit? a nemit je v jedne tabulce players?

 
Nahoru Odpovědět
21.6.2018 15:29
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.6.2018 8:35

Nemusis. Ale, sql neni excel. Funguje jinak.

Pokazde, kdyz menis atribut, musis znovu prepocitat ty cisla. Cili, zavolat 2x update po sobe, nejspis. Jednim prepises atributy a druhym prepocitas. Idealne jen pro toho jednoho hrace.
A nebo to muzes delat az v tom selectu a neukladat to do tabulky.

Kdezto v excelu, tam si do policka napises primo vzorecek pro prepocet = (A1+B1+C1) / 3.

Mimochodem, ja tyhle funkce nepouzivam, jako prumer, ale mohlo by se to jmenovat AVG, average.
https://www.techonthenet.com/sql/avg.php

Editováno 22.6.2018 8:37
 
Nahoru Odpovědět
22.6.2018 8:35
Avatar
Odpovídá na Peter Mlich
Michal Haňáček:22.6.2018 10:11

caca by mohl pouzit calculated fieldy, nebo nepracovat s tabulkou, ale View kde by ta pole pocital podle nejakych tech vzorcu, kterym rozumi jen on :-D

Nahoru Odpovědět
22.6.2018 10:11
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Michal Haňáček:22.6.2018 10:17

Pripadne by mu to mohli pocitat triggery ...

Nahoru Odpovědět
22.6.2018 10:17
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
caca
Člen
Avatar
caca:22.6.2018 15:48

tak jsem na to prisel funguje

SUM(Accelerati­on+Agility+Ba­lance+Speed) / COUNT(Accelera­tion+Agility+Ba­lance+Speed) /4 * 5 AS Skating

a kdyz nejaky z techto prikazu udelam vzdy po ulozeni sql...tak se mi nebude nic prepisovat...

 
Nahoru Odpovědět
22.6.2018 15:48
Avatar
caca
Člen
Avatar
caca:25.6.2018 23:00

Mimochodem vsem dik za rady...jeste bych, ale mel dotaz..kdyz budu delat history stats u hracu, ktere bude vypadat takto :

https://abload.de/img/4hasav.png

tak zda musim delat pro kazdeho hrace zvlast novou tabulku to znamena, ze v testovaci verzi by bylo treba 600 hracu, tak bych musel mit 600 tabulek.Nebo to jde udelat jinak??

 
Nahoru Odpovědět
25.6.2018 23:00
Avatar
caca
Člen
Avatar
caca:26.6.2018 14:25

nemel by k tomu nekdo nejakou radu?

 
Nahoru Odpovědět
26.6.2018 14:25
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:26.6.2018 14:52

Ne, stačí ti jedna tabulka, kde se cizím klíčem budeš odkazovat na konkrétního hráče

 
Nahoru Odpovědět
26.6.2018 14:52
Avatar
caca
Člen
Avatar
caca:26.6.2018 16:27

dobre, ale furt nejak nechapu jak udelam pro kazdyho hrace podobnou tabulku zvlast..kdyz to bude v jedny tabulce

 
Nahoru Odpovědět
26.6.2018 16:27
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:26.6.2018 17:31

Bude to v jedný tabulce, konkrétního hráče si budeš filtrovat v SELECTu, kde zadáš podmínku WHERE player_id = id konkrétního hráče. Ty tam ten sloupec s ID hráče nemáš, ten tam musíš přidat. Výsledný dotaz pak bude vypadat nějak takhle

SELECT *
FROM history_stats
WHERE player_id = "doplň ID požadovanýho hráče"

Takhle ti vyjedou záznamy, tak jak je máš na tom obrázku pro jednoho hráče, přičemž budeš mít jednu tabulku statistik úplně pro všechny hráče.

 
Nahoru Odpovědět
26.6.2018 17:31
Avatar
caca
Člen
Avatar
caca:26.6.2018 18:37

jasne dik, takze udelam v jedny tabulce stats treba s 500 000 radku a u kazdeho radku bude ID hrace a pak mi to vyjede?

jestli to tak je...tak OK

Editováno 26.6.2018 18:39
 
Nahoru Odpovědět
26.6.2018 18:37
Avatar
caca
Člen
Avatar
caca:27.6.2018 13:18

jeste bych mel otazecku...musim propojit stejne ID u hrace v tabulce Players a tabulce Stats?

 
Nahoru Odpovědět
27.6.2018 13:18
Avatar
dez1nd
Člen
Avatar
Odpovídá na caca
dez1nd:27.6.2018 13:54

ano

 
Nahoru Odpovědět
27.6.2018 13:54
Avatar
caca
Člen
Avatar
caca:27.6.2018 14:20

je to asi blbost se ptat, ale kdyz budu mit u tymu ID od 1 do 31 tak u hracu zacinas ID od 32 ? nebo od 1 ?

pak ty ID propojuji mezi stats a hraci pres primary key? musim jeste najit jak se to dela...

 
Nahoru Odpovědět
27.6.2018 14:20
Avatar
Odpovídá na caca
Michal Štěpánek:27.6.2018 15:05

ID každé tabulky začíná v ideálním případě od 1. Je to unikátní klíč konkrétní tabulky a nemá žádnou souvislost s číslováním ID jiných tabulek...

Nahoru Odpovědět
27.6.2018 15:05
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 50 zpráv z 65.