gpt4 book ai didi

mysql - 连接 3 个表以返回每个用户在两个日期之间的问卷(我的挑战性查询)

转载 作者:行者123 更新时间:2023-11-29 03:07:25 24 4
gpt4 key购买 nike

在这里,我会尽量简短并切入正题。这些是我的表:

问卷:

  • id[pk],
  • 姓名,
  • 输入

user_x_questionnaire:

  • id[pk],
  • 用户名[fk],
  • questionnaireid[fk references questionnaire.id]
  • 完成状态,
  • 迭代

questionnaire_time

  • id[pk]
  • questionnaireid[fk references questionnaire.id]
  • 迭代
  • 发布日期[日期/时间]
  • 截止日期[日期/时间]

因此,用户想要填写一些问卷。可以为每个用户分配一个或多个要填写的问卷 (user_x_questionnaire)。根据问卷类型(一次性或频繁),每个问卷可以由用户多次填写,因此 questionnaire_time 表存储了每一次的发布日期和截止日期。

我想要的是一个显示用户应该回答的所有当前问卷的查询。这意味着调查问卷的时间应该在发布日期和截止日期之间。我非常接近这个查询的答案,直到我意识到我所有返回的结果都产生相同的发布和截止日期,这不是我想要的。到目前为止,这是我的解决方案。

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} 将由程序提供。

最佳答案

这应该显示所有活跃的问卷,即使{USER}没有回复:

SELECT q.id, q.`name`, u.iteration, u.completedstate, t.publishdate, t.deadline
FROM questionnaire q
INNER JOIN questionnaire_time t
ON t.questionnaireid = q.id
LEFT JOIN user_x_questionnaire u
ON u.questionnaireid = t.questionnaireid
AND u.userid={USERID}
WHERE q.`type`='frequent'
AND '{CURRENT DATE}' BETWEEN t.publishdate AND t.deadline;

关于mysql - 连接 3 个表以返回每个用户在两个日期之间的问卷(我的挑战性查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com