Avatar
caca
Člen
Avatar
caca:10. června 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. června 19:43
Avatar
Matěj Strnad:10. června 20:42

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

Nahoru Odpovědět  +1 10. června 20:42
Ty vaše internety!
Avatar
caca
Člen
Avatar
caca:10. června 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. června 22:53
Avatar
Odpovídá na caca
Michal Štěpánek:10. června 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. června 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. června 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. června 0:28
Avatar
Odpovídá na caca
Michal Haňáček:11. června 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. června 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
Matěj Strnad:11. června 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  -6 11. června 7:21
Ty vaše internety!
Avatar
Odpovídá na Matěj Strnad
Michal Haňáček:11. června 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  +1 11. června 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. června 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. června 14:38
Avatar
caca
Člen
Avatar
caca:11. června 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. června 17:01
Avatar
caca
Člen
Avatar
caca:11. června 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. června 17:34
Avatar
caca
Člen
Avatar
caca:11. června 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. června 18:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. června 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. června 11:22
 
Nahoru Odpovědět 12. června 11:21
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. června 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. června 11:24
Avatar
caca
Člen
Avatar
caca:13. června 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. června 22:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. června 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. června 8:05
 
Nahoru Odpovědět 14. června 8:02
Avatar
caca
Člen
Avatar
caca:14. června 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. června 13:21
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14. června 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. června 14:19
Avatar
caca
Člen
Avatar
caca:14. června 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. června 23:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15. června 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. června 8:13
Avatar
caca
Člen
Avatar
caca:15. června 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. června 14:05
Avatar
caca
Člen
Avatar
caca:18. června 15:24

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

 
Nahoru Odpovědět 18. června 15:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19. června 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. června 14:48
Avatar
caca
Člen
Avatar
caca:19. června 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. června 16:45
Avatar
caca
Člen
Avatar
caca:19. června 19:49

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

 
Nahoru Odpovědět 19. června 19:49
Avatar
caca
Člen
Avatar
caca:19. června 20:36

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

 
Nahoru Odpovědět 19. června 20:36
Avatar
caca
Člen
Avatar
caca:19. června 20:40

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

 
Nahoru Odpovědět 19. června 20:40
Avatar
caca
Člen
Avatar
caca:19. června 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. června 21:06
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20. června 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. června 9:12
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:20. června 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. června 13:17
Avatar
caca
Člen
Avatar
caca:20. června 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. června 18:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21. června 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. června 8:40
 
Nahoru Odpovědět 21. června 8:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21. června 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. června 8:52
Avatar
Odpovídá na Peter Mlich
Michal Haňáček:21. června 10:17

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

Nahoru Odpovědět 21. června 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. června 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. června 10:35
 
Nahoru Odpovědět 21. června 10:33
Avatar
caca
Člen
Avatar
caca:21. června 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. června 15:29
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22. června 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. června 8:37
 
Nahoru Odpovědět 22. června 8:35
Avatar
Odpovídá na Peter Mlich
Michal Haňáček:22. června 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  +1 22. června 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. června 10:17

Pripadne by mu to mohli pocitat triggery ...

Nahoru Odpovědět 22. června 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. června 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. června 15:48
Avatar
caca
Člen
Avatar
caca:25. června 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. června 23:00
Avatar
caca
Člen
Avatar
caca:26. června 14:25

nemel by k tomu nekdo nejakou radu?

 
Nahoru Odpovědět 26. června 14:25
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:26. června 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. června 14:52
Avatar
caca
Člen
Avatar
caca:26. června 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. června 16:27
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:26. června 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. června 17:31
Avatar
caca
Člen
Avatar
caca:26. června 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. června 18:39
 
Nahoru Odpovědět  +1 26. června 18:37
Avatar
caca
Člen
Avatar
caca:27. června 13:18

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

 
Nahoru Odpovědět 27. června 13:18
Avatar
dez1nd
Člen
Avatar
Odpovídá na caca
dez1nd:27. června 13:54

ano

 
Nahoru Odpovědět 27. června 13:54
Avatar
caca
Člen
Avatar
caca:27. června 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. června 14:20
Avatar
Odpovídá na caca
Michal Štěpánek:27. června 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. června 15:05
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na caca
Michal Štěpánek:27. června 15:09

Tabulky se propojují pomocí cizích klíčů (FK - Foreign Key), které mohou být součástí té tabulky (při vazbě 1:N), nebo v tzv. vazební tabulce (při vazbě M:N)

Nahoru Odpovědět 27. června 15:09
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:27. června 15:44

OK dik s tim si uz nejak snad poradim, ale to ID je jen pole nebo musi byt nejak zakoreneno do tabulky?

 
Nahoru Odpovědět 27. června 15:44
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:27. června 16:29

Každá tabulka musí mít primární klíč (nejčastěji ID), který je v dané tabulce pro každý záznam unikátní. To znamená, že ID (ať už primární nebo cizí klíč) je v tabulce reprezentováno jako samostatný sloupec

 
Nahoru Odpovědět 27. června 16:29
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:27. června 16:43

Nějak takhle by ty tabulky mohly vypadat, všimni si hlavně těch klíčů, ostatní atributy jsem si vymyslel. Jsou tam 3 statistiky přičemž první dva záznamy patří Karlu Novákovi a třetí patří Janu Novotnému

 
Nahoru Odpovědět  +1 27. června 16:43
Avatar
caca
Člen
Avatar
caca:27. června 19:06

super....a u tymu to udelat asi uplne stejne, i kdyz by bylo lepsi mit u players ne kolonku id_tym_fk ale uz spis jmeno klubu...nebo v selectu to nejak udelat aby misto ID to ukazovalo jmeno klubu?

 
Nahoru Odpovědět 27. června 19:06
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:27. června 20:26

Přesně, budeš mít samostatnou tabulku pro týmy a v tabulce Hráči budeš nějakej cizí klíč na ten tým, třeba to id_tym_fk. V selectu pak budeš muset spojit ty tabulky joinem podle těch cizích klíčů, to si zkus pogooglit a pak se kdyžtak doptej

 
Nahoru Odpovědět 27. června 20:26
Avatar
Odpovídá na caca
Michal Štěpánek:28. června 8:10

Když budeš místo ID, coby cizího klíče, dávat rovnou názvy, pak budeš muset při každé změně toho názvu najít všechny výskyty toho názvu a opravit je. Když použiješ ID, tak to bude pořád stejné, bez ohledu na různé změny v původní tabulce.
Ve View si pomocí JOINů v SELECTu normálně zobrazíš názvy, které potřebuješ. Při změnách se to automaticky promítne do těch View a změnu provádíš pouze na jednom místě.

Nahoru Odpovědět 28. června 8:10
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:3. července 20:58

akorat me napadlo kdyz bude vlastne kazdy hrac mit ID....a pak se bude db aktualizovat a hrac treba s ID 2 bude vymazan protoze skoncil karieru...tak se ty ID asi premeni ne?

 
Nahoru Odpovědět 3. července 20:58
Avatar
Odpovídá na caca
Michal Štěpánek:3. července 22:07

Nic se měnit nebude, páč by sis tím rozhodil veškerou historii. Ten "ukončený" nebude vymazán, ale pouze deaktivován nějakým atributem v db. A i kdyby byl z nějakého důvodu vymazán, jeho ID už nikdy nebude použito...

Nahoru Odpovědět 3. července 22:07
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:6. července 17:02

jeste bych mel otazecku do herni databaze ohledne jsem je dobre delat jmena jako treba Petr Novak jako jedno jmeno "name" nebo rozdeli do "first" Petr a "lastname" Novak?

Je to takovej detail budu rad za kazdou napovedu

 
Nahoru Odpovědět 6. července 17:02
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na caca
Petr Čech:6. července 17:12

Typicky bys to rozdělil, nijak to nebolí a do budoucna si můžeš otevřít cestu třeba k tomu, že budeš posílat uživatelům mail, co je osloví křestním jménem.

Nahoru Odpovědět 6. července 17:12
the cake is a lie
Avatar
caca
Člen
Avatar
caca:6. července 19:20

ok, taky me napadlo kdyz budu mit treba v sloupci position (brankar, obrance, utocnik) aby to naslo jenom treba utocniky....

nebo kdyz si dam vyhledat jeden attribut aby mi to seradilo od nejvyssiho cisla po nejmensi

 
Nahoru Odpovědět 6. července 19:20
Avatar
caca
Člen
Avatar
caca:10. července 13:46

jak je tedy ten prikaz ? normalne dam select name atp..a From players ale jak vybrat jen brankere mi nejde do hlavy..

 
Nahoru Odpovědět 10. července 13:46
Avatar
Petr Langer
Člen
Avatar
Odpovídá na caca
Petr Langer:10. července 15:43

Jestli máš u hráče atribut s pozicí tak je to takhle

SELECT *
FROM players
WHERE position = 'goalkeeper'
 
Nahoru Odpovědět 10. července 15:43
Avatar
Odpovídá na caca
Michal Štěpánek:11. července 7:42

Možná bys měl zkusit alespoň nakouknout do základů SQL dotazů, protože toto je skutečně úplný základ SQL...

Nahoru Odpovědět  +1 11. července 7:42
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 65 zpráv z 65.