1
以下是我的環境:我的db包含一些與選舉有關的數據。 每次選舉都有開始時間和結束時間,在此期間,人們可以爲某人投票。在特定日期執行自動操作
我想這樣做,當結束時間發生時,DB使得計票結果,並根據誰的票數最多的用戶自動設置一個表上的贏家場。 必須將此事件添加到插入「選舉」表中的每個新行中,顯然,每行都會有不同的結束時間。
是否有可能創建一個觸發器到達日期時間時,誰喚醒?
以下是我的環境:我的db包含一些與選舉有關的數據。 每次選舉都有開始時間和結束時間,在此期間,人們可以爲某人投票。在特定日期執行自動操作
我想這樣做,當結束時間發生時,DB使得計票結果,並根據誰的票數最多的用戶自動設置一個表上的贏家場。 必須將此事件添加到插入「選舉」表中的每個新行中,顯然,每行都會有不同的結束時間。
是否有可能創建一個觸發器到達日期時間時,誰喚醒?
可以使用cron
,pgAgent
或類似的作業調度程序只能做這樣的事情。
但你不必這樣做。只需使用一個表,如:
create table election_candidates (
election_id int not null references elections(election_id),
user_id int not null references users(user_id),
votes int not null default 0
);
create index election_candidates_election_id_votes_idx
on election_candidates(election_id, votes);
當選舉開始創建election_candidates
行,並與votes=0
每名候選人。當您收到投票時,您只需使用update election_candidates set votes=votes+1 where election_id=? and user_id=?
。如果您需要記錄投票,而不是在另一個表中進行投票,並使用觸發器更新此表。
當你需要檢查你只是用一個贏家:
with max_votes as (
select election_id, max(votes) as max_vote from election_candidates
where election_id=?
group by election_id
)
select user_id from election_candidates
natural inner join max_votes
where votes=max_vote;
但是請記住,可以有不止一個贏家當一個以上的候選人將獲得相同票數。
您可以查看[pgAgent](http://www.pgadmin.org/download/pgagent.php)。 – zero323
我想以代碼的形式執行 – Phate
對於您的問題的回答「是否可以創建在達到日期時間時喚醒的觸發器」爲「否」。您必須使用外部流程來觸發操作。 – bma