ここでは、できるだけ手短に、本題に沿って説明しようと思います。これらは私のテーブルです:
アンケート:
- id[pk]、
- 名前、
- タイプ
user_x_アンケート:
- id[pk]、
- ユーザーID[fk]、
- 調査票ID[fkは調査票.idを参照]
- 完成状態、
- 反復
アンケート時間
- id[pk]
- 調査票ID[fkは調査票.idを参照]
- 反復
- 公開日[日時]
- 締め切り[日時]
そのため、ユーザーはいくつかのアンケートに記入したいと考えています。各ユーザーは、入力する 1 つ以上のアンケートに割り当てることができます (user_x_questionnaire)。アンケートの種類 (1 回または頻繁) に応じて、ユーザーは各アンケートに複数回入力できます。
私が欲しいのは、ユーザーが回答することになっている現在のすべてのアンケートを表示するクエリです。つまり、アンケートの時間は公開日と締め切りの間にある必要があります。返されたすべての結果が同じ発行と締め切りを生成することに気付くまで、このクエリの答えに非常に近づきましたが、これは私が望んでいたものではありませんでした。これがこれまでの私の解決策です。
SELECT * FROM (
SELECT DISTINCT questionnaire.id
, questionnaire.`name`
, user_x_questionnaire.iteration
, completedstate
, questionnaire_time.publishdate
, questionnaire_time.deadline
FROM user_x_questionnaire
, questionnaire_time
, questionnaire
WHERE userid={USERID}
AND user_x_questionnaire.questionnaireid=questionnaire.id
AND questionnaire.`type`='frequent'
AND user_x_questionnaire.questionnaireid=questionnaire_time.questionnaireid
) As result
WHERE '{CURRENT DATE}' BETWEEN publishdate AND deadline;
{USERID} と {CURRENT DATE} は、プログラムによって提供されます。