我将在这里尽可能简短和切入正题。这些是我的表:
问卷:
- 身份证[PK],
- 姓名,
- 类型
user_x_questionnaire:
- 身份证[PK],
- 用户名 [fk],
- 问卷ID[fk 参考问卷.id]
- 完成状态,
- 迭代
问卷调查时间
- 编号[pk]
- 问卷ID[fk 参考问卷.id]
- 迭代
- 发布日期[日期/时间]
- 截止日期[日期/时间]
所以,用户想要填写一些问卷。可以为每个用户分配一份或多份问卷以填写 (user_x_questionnaire)。根据问卷类型(一次或频繁),用户可以多次填写每个问卷,因此问卷调查表存储每个时间的发布日期和截止日期。
我想要的是一个显示用户应该回答的所有当前问卷的查询。这意味着问卷的时间应该在发布日期和截止日期之间。我非常接近这个查询的答案,直到我意识到我返回的所有结果都产生了相同的发布和截止日期,这不是我想要的。到目前为止,这是我的解决方案。
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} 将由程序提供。