Zainteresuj się funkcją, procedurą "wyzwalaczem" trigger w MySQL. Nie wiem, czy to można nazwać funkcją, czy procedurą, ale mniejsza z tym.
Tut: https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html
Tut: http://it.dth.pl/triger-wyzwalacz-mysql-opis-i-przyklady/
Możesz także zainteresować się tzw. widokami, z ang. view.
Tut: https://dev.mysql.com/doc/refman/5.7/en/create-view.html
Tut: http://strefakodera.pl/bazy-danych/sql/widoki-tworzenie-i-usuwanie-widokow-w-sql-cz-i
Polecam także przejżeć link poniżej, z ang. event.
Tut: https://dev.mysql.com/doc/refman/5.7/en/create-event.html
Wydaje mi się, że do rozwiązania twojego zadania potrzebny jest właśnie event.
Tut: https://dev.mysql.com/doc/refman/5.6/en/events-configuration.html
Skorzystaj przede wszystkim z tego tutoriala: https://dev.mysql.com/doc/refman/5.7/en/create-event.html
Jestem już prawie całkowicie przekonany, że do wykonania tego zadania, potrzebować trzeba będzie użyć event'a.
Reasumując napisz event'a, który np. co 60 minut będzie ci zmieniał stan surowca na inną ilość dodając przy tym odpowiedni warunek, gdzie po 60 minutach, ma go być 20, po drugiej godzinie ma go być 72, po 3. 119 itd.... Tak jak masz to w swojej tabeli.
Może stworzę przykładową tabelę o nazwie orzechy:
create table orzechy (id int auto_increment primary key,ilosc int,czas time);
A w niej takie dane:
id |
ilosc |
czas |
1 |
null |
20:30:30 |
Do tej tabeli kod:
CREATE EVENT `orzechy` ON SCHEDULE
EVERY 30 SECOND
STARTS '2017-04-30 20:35:00' ON COMPLETION NOT PRESERVE ENABLE
DO
update orzechy set czas=now(),ilosc=(case
when czas>='20:30:00' and czas<='20:35:30' then 12
when czas>='20:36:00' and czas<='20:40:00' then 33
when czas>='20:40:30' and czas<='20:45:30' then 42
else 90
-- zamiast 90 moze byc jakas inna przykladowa wartosc
end);
Kod dostosuj do własnych potrzeb.
Przydatne linki:
-http://stackoverflow.com/questions/34490325/mysql-combine-two-update-queries-in-one-query
- http://stackoverflow.com/questions/12754470/mysql-update-case-when-then-else
- https://mariadb.com/kb/en/mariadb/case-operator/
- http://stackoverflow.com/questions/3389713/how-does-mysql-case-work
- http://stackoverflow.com/questions/15766102/i-want-to-use-case-statement-to-update-some-records-in-sql-server-2005
- Google
Pamiętaj tylko o tym, że w kliencie mariadb zapytanie z CASE kończy się END, a nie jak w kliencie mysql END CASE. Ważne: Inaczej zapytanie nie wykona się. Jak nie będzie coś działało w zapytaniach mysql, a używamy klienta mariadb to warto , a nawet konieczne jest to, aby sprawdzić jak wygląda syntax tego zapytania w oficjalnej dokumentacji
Oczywiście, jeśli chcesz mieć co godzinę zmienianą wartość to musisz zmienić wartość:
every 30 second, na:
every 1 hour
Możesz opcjonalnie zmienić też tę wartość oznaczającą od kiedy to ma działać:
STARTS '2017-04-30 20:35:00'
I na koniec musisz pozmieniać te wartości na swoje:
czas>='20:30:00' i czas<='20:35:30'
i tamte następne wartości też.
Jeśli się, gdzieś pomyliłem to proszę mnie poprawić.