私は投票システムを持っており、投票の作成者に電子メールを送信できるように、どの投票が完了したかを検出するMySQLのクエリを作成しようとしています。投票は、(1)時間がなくなると(すでに簡単に解決できます)、または(2)すべての投票者が投票したときに完了します。
これに関連する2つのテーブルがあります。最初のテーブルは「votes」で、各投票が記述され、一意の「vote_id」があります。2番目のテーブルは「チケット」です。投票の作成時に、各参加者はチケットを作成します(これにはいくつかの認証情報が含まれています)。各チケットには、「votes」テーブルのフィールドに対応する「vote_id」フィールドがあります。したがって、基本的に、人々が投票すると、対応するチケットがチケットテーブルから削除されます。これは、特定の「vote_id」の「チケット」の行数が、投票しなかった人の数に対応することを意味します。
最初に私はこのようなことをしに行きました:
SELECT votes.vote_id
FROM votes, tickets
WHERE votes.vote_id=tickets.vote_id
AND (votes.completion_timestamp < NOW())
HAVING (COUNT(tickets.vote_id) = 0)
しかし、その後、「votes.vote_id=tickets.vote_id」行のために...未処理のチケットがない投票は無視されることを意味することに気づきました。これを行うには多くの非効率的な方法を考えることができますが、MySQLでこれを行う方法があると思いますか?
質問の一般化された要約:共通のフィールドFを持つ2つのテーブルAとBが与えられた場合、Bに存在しないAのすべてのFを見つけるにはどうすればよいですか?