gpt4 book ai didi

mysql - 根据多行中的时间戳和其他条件从 mySQL 数据库中获取结果

转载 作者:行者123 更新时间:2023-11-30 23:16:08 25 4
gpt4 key购买 nike

我有一个只有几个表的数据库,这些表是根据通过不断变化的表单内容提交的值填充的,这些表单内容包含很多复选框、单选按钮、选择列表变量等...

表单的每个元素都有一个唯一的 ID,例如 Q1、Q2、Q3 等...无论用户在信息上勾选了什么,都会将其添加到数据库中。

插入信息的“提交”表如下所示:

doc_id  ques   ans          other   final  
1 Q1 1 blah 1
1 Q2 5 1
1 Q2 6 1
3 Q3 1 blah
4 Q4 8
1 Q6 1375228800 1

如果用户想要获取 Q1 设置为 1,Q2 设置为 5 的所有文档,它可以工作,但是当指定了日期时,它就不起作用了。

搜索条件可以随时更改,并且它主要工作,但尝试按时间戳过滤结果时除外,例如“ans”字段显示 Unix 时间戳“1375228800”

这是一个例子:

SELECT doc_id FROM submission
WHERE (ques IN ('Q1') AND ans IN ('1'))
AND (ques IN ('Q2') AND ans IN ('5'))
AND (ques = 'Q6' AND ans >= '0' AND ans <= '1375228800')
AND final = '1'
GROUP BY doc_id

除了添加时间戳部分外,它都有效......在这种情况下,Q6 的值为 1375228800。

让它发挥作用的最佳方法是什么?

最佳答案

您的查询有几处需要修改。

首先,如果您要与单个值进行比较,则没有理由使用 IN 子句。所以改变你的

ques IN ('Q1')

ques = 'Q1'

对于类似的实例也是如此。

其次,我假设您将时间戳存储为整数,而不是字符串。因此,您不应该用引号将时间戳括起来,这表示字符串比较。相反,你可以简单地写,

ans >= 0 AND ans <= 1375228800

或者您可以使用 BETWEEN运算符

ans BETWEEN 0 and 1375228800

最后,您将“AND”的英文理解与程序理解混淆了。如果你说,

(ques IN ('Q1') AND ans IN ('1'))
AND (ques IN ('Q2') AND ans IN ('5'))

您要求 ques 同时是 Q1 和 Q2,这显然是不可能的。相反,您想使用“OR”子句。鉴于此,您的查询可以重写为

SELECT doc_id FROM submission
WHERE ((ques = 'Q1' AND ans = 1)
OR (ques = 'Q2' AND ans = '5')
OR (ques = 'Q6' AND ans BETWEEN 0 AND 1375228800))
AND final = 1
GROUP BY doc_id

这将选择所有提交,其中:

  • 问题是Q1,答案是1,最后是1
  • 问题是Q2,答案是5,最后是1
  • 问题是Q6,答案在0到1375228800之间,最后是1

关于mysql - 根据多行中的时间戳和其他条件从 mySQL 数据库中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17758786/

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