Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno mysql - automatický update a kontrola data

Dobrý den, řeším jeden problém: dělám jako BP jeden web (php) s databází (mysql) a potřebuji vyřešit toto:

Mám tabulku kde kromě jiných atributů je atribut "stav" a atribut "datum"..obojí je vyplněno a já potřebuju aby až nastane to datum, které je ve sloupci "datum" uloženo, databáze sama změnila ve stejném řádku ve sloupci "stav" hodnotu...

názorný příklad:

id | stav | datum |
---------------------------------
1 | připraveno | 2012-03-02 |
2 | probíhá | 2012-02-22 |
3 | připraveno | 2012-03-04 |
---------------------------------

tedy v 0:00 2. března 2012 potřebuju, aby se sama změnila hodnota "stav" u id 1 na probíhá a to stejné u id 3 4. března 2012...

Moc děkuji za pomoc

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ou, tady se to rozjelo... Takže trochu upřesním - padl tu návrh abych to kontroloval při vstupu na… nový
n.u.r.v. 02.03.2012 01:22
n.u.r.v.
Ja jsem to přečetl a me view je ta sama odpoved jako od JaFIho ta prvni - jde to udelat jen upravou… nový
AZOR 02.03.2012 19:37
AZOR
Tak jsem zkoušel nastavit ty eventy, ale bohužel to nějak nefunguje-zkoušel jsem různé příklady z ne… nový
n.u.r.v. 05.03.2012 02:19
n.u.r.v.
commit? nový
AZOR 05.03.2012 10:04
AZOR
myslíš jako za to přidat příkaz commit? zkusím....ještě jeden problém... pokusy jsem dělal na pc a t… nový
n.u.r.v. 05.03.2012 16:43
n.u.r.v.
neviem ti teraz narychlo povedat v com je problem, musim si pozriet dokumentaciu. Ja som to kedysi s… nový
wam_Spider007 05.03.2012 16:50
wam_Spider007
no to s tou podmínkou slyším poprvé...na škole jsme měli předminulý semestr databáze a učil nás týpe… nový
n.u.r.v. 06.03.2012 00:34
n.u.r.v.
ako som pisal, namiesto != by som radsej pouzil dva zobaky <> (nerovna sa). Funguje aj ten tvoj zapi… nový
wam_Spider007 06.03.2012 10:54
wam_Spider007
to je nesmysl, != je v javě, v c++ apod. <> je v jinejch jazycich. Podle mne je to uplne jedno, zapi… nový
AZOR 06.03.2012 11:55
AZOR
to je vsetko ok, mysql a aj ostatne db systemy podporuju oba zapisy (vynimkou je DB2). Tam ide skor… nový
wam_Spider007 06.03.2012 12:56
wam_Spider007
<> Hlavně vypadá líp, dost se to podobá učetelkám zeměpisu 8-) nový
AZOR 06.03.2012 13:32
AZOR
Zabudni na eventy, triggre a podobné prasačiny. Na toto ti stačí jednoduchý select, ako tu už niekoľ… nový
los 06.03.2012 17:44
los
dobře, jednoduchý select...ok...jsem zvědavej jak selectem budu updatovat tabulku... protože první… nový
n.u.r.v. 08.03.2012 00:47
n.u.r.v.
Prečo by si chcel selectom updatovať tabuľku? Prečo by si chcel vôbec čímkoľvek updatovať tabuľku? V… nový
los 08.03.2012 07:43
los
Ano, právě že to porovnávání dle data mám teď tak udělané - pokud datum počátku hlasování je/bylo a… poslední
n.u.r.v. 08.03.2012 09:52
n.u.r.v.
Los myslí že si selcetneš ty řádky, vytáhneš si to datum a pomocí PHP si to porovnáš a vypíšeš.. má… nový
tomas.kulhanek 08.03.2012 07:53
tomas.kulhanek

Ou, tady se to rozjelo...

Takže trochu upřesním - padl tu návrh abych to kontroloval při vstupu na stránky....toto tak mám zatím ale jen nouzově- je to prasečinka...i když 100% funkční...

Jde totiž o to, že na stránce mám el.hlasování, kde po přihlášení můžou uživatelé hlasovat...

Požadavky byly:

-možnost nastavit od kdy do kdy je možné hlasovat
-kdykoliv přerušit předčasně hlasování a vyhlásit výsledky
-každy z reg. uživatelů max. 1x hlasovat
-není dán pevný počet možností - někdy 2, někdy i 10...(min 2)
-možnost přiložit k anketě přílohu (soubor)
-zobrazovat datum od kdy do kdy je možné hlasovat

udělal jsem to v dbs takto:

-2 tabulky-(ankety, ankety-moznosti-vysledky):

-v tabulce ankety jsou tyto atributy:
-id,nadpis,text,pocet_moznosti,odhlasoval,stav,zac atek(typ date),konec(typ date)

-v tabulce ankety-moznosti-vysledky jsou tyto atributy:
-id,id_ankety(cizí klíč - tab. ankety),id_moznosti,text_moznosti,pocet_hlasu

ještě nedávno nebyl chtěn požadavek zrušit anketu předčasně, takže tam nebyl atribut "stav" a vše se řídilo dle data "začátek" a "konec"...když aktuální datum splňovalo rozmezí, anketa se zobrazila a šlo hasovat, když už bylo po datu "konec", tak se ukázalo vyhodnocení...

jenže teď přibyl požadavek na předčasné ukončení, takže jsem musel přidat atribut "stav" (hodnoty čeká, probíhá, ukončeno)... a tady potřebuji aby když datum začátek nastalo tak se změní stav na probíhá, když nastane datum konec, stav se změní na ukončeno...

Sorry za případné překlepy - mám bezdrát.klávesnici a docházej baterky tak to vynechává...

Ja jsem to přečetl a me view je ta sama odpoved jako od JaFIho ta prvni - jde to udelat jen upravou selectu a mozna jeste lepe pridat jen atribut FORCE_CLOSET a pak to vybirat jen vhodne ulozenym selectem. Dalsi moznost je tabulka stavu a vhodny JOIN, ktery to zase udela v selectu, aby jsi nemusel ukládat stavy jinde- ta logika je jasná - bud je to v tom intervalu a neni flag y nebo je flag n a je to taky jasné.

Tak jsem zkoušel nastavit ty eventy, ale bohužel to nějak nefunguje-zkoušel jsem různé příklady z netu a event se sice vytvoří, ale už nespustí...

zkusil jsem toto (en tak na zkoušku, bez data apod...):

DELIMITER $$
CREATE
	EVENT `test1`
	ON SCHEDULE EVERY 1 MINUTE STARTS '2011-07-24 02:10:00'
	DO BEGIN
		UPDATE `nazev_databaze`.`ankety` SET `stav` = '1' WHERE `ankety`.`stav` != '1'
	END
$$ DELIMITER ;

zkusil jsem i toto:

CREATE  EVENT test2 
 ON  SCHEDULE AT CURRENT_TIMESTAMP  + INTERVAL  1 MINUTE
 DO 
 UPDATE  nazev_databaze.ankety SET  stav = 1;

a taky nic..event si sedí v databázi a nic nedělá...

Nevíte kde dělám chybu...když totiž rozchodím ty eventy, tak budu mít vyřešený můj problém dokonale...díky za rady

myslíš jako za to přidat příkaz commit? zkusím....ještě jeden problém... pokusy jsem dělal na pc a tam i když nešly ty eventy, tak šly alespoň zobrazit...teď budu do konce týdne na notebooku a zaboha nemůžu přijít/vzpomenout na ten příkaz pro zobrazení uložených eventů...show event to není...

no to s tou podmínkou slyším poprvé...na škole jsme měli předminulý semestr databáze a učil nás týpek z akademie věd a na férovku nás tyto druhy zápisu učil...

a jak se pak mají porovnávat řetězce?

Zítra zkusím vycucat nějaké rady od kolegů ve škole,ale začínám z toho být na prášky...A aby toho nebylo málo, tak jsem dnes hodil ty nové webovky na školní server a zjistil jsem že mi nefunguje upload souborů ani ukládání vygenerovaných souborů (fpdfp)-asi je to na tom servru zakázané nebo co... když jsem zkoušel upload, tak jsem si vypsal chybu (error_reporting(0);) a vypsalo to chybu číslo 22527, tak nevím...3-[

to je nesmysl, != je v javě, v c++ apod. <> je v jinejch jazycich. Podle mne je to uplne jedno, zapisu != stejne jako <> musi rozumet kazdej. Chapal bych kdyby jsi byl proti zapisu ^= /nevim jestli mysql podporuje, oracle ano/ ten moc lidi nezna.

dobře, jednoduchý select...ok...jsem zvědavej jak selectem budu updatovat tabulku...

protože první co mi u obhajoby vytknou je: "Proč při každém přístupu na tuto stránku kontrolujete stav položky v databázi (a případně měníte stav)? Vždyť to zbytečně moc zatěžujete server...nešlo použít něco jiného?"

EDIT:PRávě jsem zjistil, že eventy podporuje databáze myslq od verze 5.1.xxx, ale na mém notebooku i na školní serveru je verze 5.0.9xx, takže nic...takže se mám na co vymluvit a udělám si na to v php funkci...

Prečo by si chcel selectom updatovať tabuľku? Prečo by si chcel vôbec čímkoľvek updatovať tabuľku? Veď v tomto prípade potrebuješ len čítať z tabuľky. A na to je select (prípadne si nad tým môže spraviť view, ale imho v tomto prípade je to zbytočnosť).

Ak by si to obhajoval u mňa, tak prvé čo by som sa spýtal by bolo, prečo si sa rozhodol použiť trigger, event alebo cron. A nech by si odpovedal čokoľvek, už by som si myslel svoje.

Načo tam vôbec potrebuješ stĺpec stav? Veď stav objektu je popísaný tými dátumami platnosti od-do a indikátorom, či bolo hlasovanie predčasne ukončené. Takže v tom selecte nepotrebuješ ani case. Navyše, o reprezentácii stavu textovým reťazcom by sa tiež dalo diskutovať.

Ano, právě že to porovnávání dle data mám teď tak udělané - pokud datum počátku hlasování je/bylo a zároveň datum ukončení bude/je, tak je možné hlasovat...

A ten stav je právě to předčasné ukončení...(předělám na netextový)...sice jsem mohl předčasně ukončit hlasování tak, že bych updatoval konečné datum, jenže já potřebuji aby i po ukončení bylo vidět nastavené původní datum od-do...

A právě jsem si myslel, že když by databáze sama vždy v noci zkontrolovala to rozmezí data a příp.změnila podle toho stav, tak při hlasování by stačilo pro zobrazení jen obyč. select where stav neukončená...a odpadlo by nějaké vyhodnocování apod...

ale ok-nechám to tak jak mám no...když je to lepší...

Zpět do poradny Odpovědět na původní otázku Nahoru