Autor Zpráva
BunnyBugs
Profil *
Zdravím, chtěl bych se zeptat na následující:

Mám tabulku se sloupcem 'něco1', 'něco2', 'něco3' a 'něco4', všechno pouze číselné hodnoty.
Jak docílím toho, aby se mi do sloupce 'něco4' uložila automaticky hodnota, třeba součet 'něco2' a 'něco3', ale jen při splnění nějaké podmínky z 'něco1' a ještě s tím, že 'něco1' je dosazeno až později?.

Příklad:
1.fáze: V pondělí dosadím do 'něco2' a do 'něco3' nějakou hodnotu, tím první krok končí
2.fáze: Ve středu dosadím nějakou hodnotu do 'něco1' a potřebuji, aby se mi automaticky dosadila hodnota (výpočet dle nějaké podmínky) do sloupce 'něco4'.

Doufám, že dotaz je popsán srozumitelně.
Různě jsem brouzdal po nápovědách, ale vůbec nemám představu, pod čím to mám hledat.
Takže předem děkuji za jakýkoliv odkaz či nápovědu.
Alphard
Profil
Spustit určitý kód v návaznosti na nějakou akci umožňují triggery. Mohu-li předpokládat MySQL, viz dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html.
V konkrétním případě by se hodil trigger navázaný na update, kde si zavolaná funkce zkontroluje podmínky a provede nějakou akci.
BunnyBugs
Profil *
Aha, tak to jsem asi v pytli, tomu vůbec nerozumím :(
To budu muset zřejmě vymyslet funkcí v php při vkládání hodnoty do sloupce 'něco1', aby se automaticky spočítal a dosadil sloupec 'něco4', snad to nějak půjde.
Ale díky za odkaz, zkusím to časem pochopit, průšvih je totiž v tom, že si moc s angličtinou netykám a překladače to pěkně zvoslej.
Tori
Profil
BunnyBugs:
A nešlo by upravit ten dotaz z 2. fáze? (tj. nebylo by to dopočítané "automaticky", ale přímo v kódu nebo v dotazu) např.: $sql = "update tabulka set sloupec1 = '$hodnota', sloupec4 = (sloupec3 + sloupec2) where id = '$id_radku'";
BunnyBugs
Profil *
[#4] Tori
To by určitě šlo, takhle jsem to měl v plánu, jen nevím, jak to udělat, protože ten sloupec jedna bude závislý třeba na 20ti řádcích, to bude různé.
Tak jsem myslel, nejde-li to udělat jednodušeji.
juriad
Profil
BunnyBugs:
Zkus popsat celý nápad pomocí jiných pojmů než „něco“ a „sloupec“, přijde mi, že se snažíš znásilnit databázi k tabulkovému procesoru (Excelu).
Je dost možné, že jsi zvolil úplně špatnou strukturu databáze a teď jen řešíš následky své volby.
BunnyBugs
Profil *
[#6] juriad
Tak já si ten návrh teprve vytvářím, proto řeším, jak to nejlépe vytvořit. Tedy konkrétně:

Jedná se o tipovací soutěž výsledků zápasů a podle tipů budou jak přidělovány body. Takže třeba uživatel tipne výsledek 2:1, který se dosadí do sloupce, samozřejmě dvojka svůj sloupec, jednička také svůj. Po uzavření tipů se vyplní výsledek, třeba 3:2 také do dvou sloupců a následně k tomu potřebuji přidělit body. Tzn., že třeba za správný tip na přesný výsledek 10 bodů, za správný tip výhry 5 bodů apod., těch bodů je tam víc, všechny je nemá smysl vypisovat. No a poslední součet by měl obsahovat součet bodů na jeden tip. Následně by se pak dala vypisovat tabulka nejlepšího tipaře, nebo celkový přehled tipů apod.
Mojim cílem zde je zjistit, jak to udělat co nejefektivněji. Tabulku uživatelů už mám, funguje pro jiné aplikace.
Pokud mi tedy někdo poradí, jak to udělat co nejlépe, budu velmi rád.
juriad
Profil
Asi bych ty tabulky navrhl následovně:
• první čtyři jsou čísleníky her a možných sázek a jejich hodnocení včetně bodování
• další dvě reprezentují odehrané zápasy
• další dvě reprezentují tipy uživatelů na různé aspekty výsledků včetně jejich obodování
Vše ostatní (přehledy, součty získaných bodů) lze získat složenými dotazy.

Jelikož je možné sázet nejen na skóre, ale na cokoli (počet střel, čas prvního koše, úspěšnost trestných hodů) zvolil bych na uložení tipu i výsledu buď VARCHAR nebo BLOB a nesnažil se třeba skóre normalizovat na dvě složky.

# 1, Fotbal; 2, Hokej; 3, Basketbal; ...
typy_hry (id_typ_hry, název_hry)

# 1, skóre; 2, nejproduktivnější hráč; 3, celkový počet gólů; 4, počet faulů domácích; ...
typy_výsledků (id_typ_výsledku, názve_výsledku)

# 1, shoda; 2, odchylka1; 3, výhra/prohra; ...
typy_hodnocení (id_hodnocení, název_hodnocení)

# 1, 1, 1, 10; 1, 1, 3, 5; ...
typy_hodnocení_výsledků_hry (id_hry, id_typ_výsledku, id_hodnocení, body)


# 1, 1, 1.1.2014; 2, 1, 2.1.2014; 3, 3, 5.2.2014; 4, 2, 7.3.2014; ...
zápasy (id_zápas, id_typ_hry, datum)

# 1, 1, '3:4'; 1, 2, 'Hejhula'; ...
výsledky_zápasů (id_zápas, id_typ_výsledku, data)


# 1, 1, 1; 2, 1, 4; ...
tipy (id_tip, id_uživatel, id_zápas)

# 1, 1, '1:0', 5; 2, 1, 'Pajdula', NULL; ...
tipy_výsledků (id_tip, id_typ_výsledku, data, body)

Ale možná, že chceš něco jiného.
BunnyBugs
Profil *
Nene, tohle už je pomalu sázková kancelář :) a na to bych si ani netroufnul.
To, co potřebuji, je jen tip samotného výsledku, nic složitého. Z toho se pak jen počítají body za přesný tip skóre, nebo rozdíl počtu gólů, apod.
Alphard
Profil
BunnyBugs:
Pracujete v PHP? Je celkem jedno, který jazyk, ale nesnažil bych se tohle dělat na straně databáze, když nemáte moc zkušeností, bylo by to obtížné.
Doporučuji vytvořit si ve vaší aplikaci sestavu funkcí, která po zadání výsledků dopočítá body. Tabulky s číselníky (jak navrhoval [#8] juriad) nebudou potřeba, protože budou přímo zapsané v programu, zápasy a výsledky zápasů půjde dát dohromady, protože neuvažujeme tak obecný případ, a pro tipy bude také stačit jedna tabulka.

Jednotlivé akce rozdělit pomocí podmínek, přesný typ where s1 == x and s2 == y, tip na výhru where s1 > s2 apod. Jestli ta pravidla nejsou příliš složitá, mohla by stačit kombinace několika update příkazů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: