对不起,我不知道如何描述这个话题。
我有一个数据库,我在其中存储条目的unixtime和其他内容,在这种情况下,用户的“名称”列和“类型”列可以为1或2。
我想检查是否有名称相同的条目,并在5秒内将类型从1切换到2,然后再切换回1或2 1 2。
它向我展示了这样的东西:
Unixtime Name type
1550293559 Peter 2
1550293560 Peter 1
1550293561 Peter 2
有没有可以帮助我做到这一点的查询?
对不起,我真的希望你们能理解,我不知道如何正确解释问题。
谢谢。
答案 0 :(得分:-1)
您可以使用该表上的3x自连接和必要条件(所有3行具有相同的名称,等等)来实现。有关更多信息,请参见http://www.mysqltutorial.org/mysql-self-join/。
请注意,由于联接会产生所有可能的排列作为输入资料,因此您不必在查询的where部分中对条件进行“排列”。例如。要获得5秒规则,您可以说
... where e1.unixtime > e2.unixtime and e2.unixtime > e3.unixtime and e3.unixtime+6 > e1.unixtime ...
编辑:由于原始答案是错误的,因此这里是完整查询(抱怨),假设表名为“ sotest”:
SELECT
*
FROM
sotest e1
JOIN
sotest e2
JOIN
sotest e3
WHERE
(e1.name = e2.name AND e2.name = e3.name
AND e1.unixtime > e2.unixtime
AND e2.unixtime > e3.unixtime
AND e3.unixtime + 6 > e1.unixtime)
AND ((e1.type = 1 AND e2.type = 2
AND e3.type = 1)
OR (e1.type = 2 AND e2.type = 1
AND e3.type = 2))