你想實現什麼是您使用的存儲層上的基本隊列。
User (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(125) NOT NULL
);
User_Group (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INTEGER UNSIGNED NOT NULL,
group_id INTEGER UNSIGNED NOT NULL
);
Group (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(75) NOT NULL,
description VARCHAR(255)
)
MailingList (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INTEGER UNSIGNED NOT NULL,
);
# mails to be sent out to groups/all
MailQueue (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
group_id INTEGER UNSIGNED,
time_to_send DATETIME DEFAULT CURRENT_TIMESTAMP
);
你會排隊組電子郵件與有效的UNIX時間戳進入在MailQueue條目。您應該創建一個「全部」組,您將分配每個用戶,以便您仍然可以正確使用這些表。你會執行您的Cron查詢像這樣:
SELECT User.email
FROM MailQueue
INNER JOIN User_Group ON (MailQueue.group_id = User_Group.id)
INNER JOIN User ON (User_Group.user_id = User.id)
WHERE MailQueue.time_to_send < NOW();
你需要確保你刪除的結果集你作爲你不向其發送重複的電子郵件條目之後他們。如果你想保留日誌發送的電子郵件,只需添加另一個TINYINT(1) UNSIGNED
字段,表示sent_email = 1
並解決您SELECT
查詢只搶的結果,如果值是0
標題寫着「調度」,但我讀的是關於支持1+收件人。請記住,電子郵件服務器可以對電子郵件進行排隊,並且只能以指定的時間間隔發送。 – 2009-12-20 17:39:41