Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL Datediff-问题是什么?_Php_Mysql_Sql_Datediff - Fatal编程技术网

Php MySQL Datediff-问题是什么?

Php MySQL Datediff-问题是什么?,php,mysql,sql,datediff,Php,Mysql,Sql,Datediff,我有以下问题。我的数据库如下所示: 我想从该数据库中获取超过2天的所有数据,以及status=“Betreiber informiert”或status=“Betreiber informiert(manuell)” 我创建了一个查询,但它不工作。有人能帮我吗 这是我的疑问: SELECT * FROM meldungen WHERE status = 'Betreiber informiert' OR status = 'Betreiber informiert(manuell)

我有以下问题。我的数据库如下所示:

我想从该数据库中获取超过2天的所有数据,以及
status=“Betreiber informiert”
status=“Betreiber informiert(manuell)”

我创建了一个查询,但它不工作。有人能帮我吗

这是我的疑问:

SELECT * 
FROM meldungen 
WHERE status = 'Betreiber informiert' 
   OR status = 'Betreiber informiert(manuell)' 
  AND DATEDIFF(NOW(), Meldungszeitpunkt) > 172800
如果我使用此查询,它如下所示:

您可以看到我的查询选择了所有具有
状态='Betreiber informiert'
状态'Betreiber informiert(manuell)
但不考虑天数的行

有人能帮我吗?172800是多少

试试这个:

SELECT m.*
FROM meldungen m
WHERE m.status IN ('Betreiber informiert', 'Betreiber informiert(manuell)') AND
      m.Meldungszeitpunkt < NOW() - interval 2 day;
对我来说,这种解释似乎不太可能(尽管你的问题就是这样)

你可能想要
curdate()
而不是
now()
,除非你想把时间考虑进去。

嗯?172800是多少

试试这个:

SELECT m.*
FROM meldungen m
WHERE m.status IN ('Betreiber informiert', 'Betreiber informiert(manuell)') AND
      m.Meldungszeitpunkt < NOW() - interval 2 day;
对我来说,这种解释似乎不太可能(尽管你的问题就是这样)


你可能想要
curdate()
而不是
now()
,除非你想把时间考虑进去。

我想你只需要将代码更改为以下内容:

SELECT * 
FROM meldungen 
WHERE status = 'Betreiber informiert' 
  AND DATEDIFF(NOW(), Meldungszeitpunkt) > 172800 
   OR status = 'Betreiber informiert(manuell)' 
  AND DATEDIFF(NOW(), Meldungszeitpunkt) > 172800
您必须为每个


对于您的旧代码,它只是从每个时间戳中搜索“Betreiber informiert”和超过两天的“Betreiber informiert(manuell)”。

我认为您只需将代码更改为以下内容:

SELECT * 
FROM meldungen 
WHERE status = 'Betreiber informiert' 
  AND DATEDIFF(NOW(), Meldungszeitpunkt) > 172800 
   OR status = 'Betreiber informiert(manuell)' 
  AND DATEDIFF(NOW(), Meldungszeitpunkt) > 172800
您必须为每个


对于旧代码,它只需从每个时间戳中搜索“Betreiber informiert”和超过两天的“Betreiber informiert(manuell)”。

172800
是两整天的秒数。如果您真的想这样做,那么应该使用
TIMESTAMPDIFF

SELECT m.*
FROM meldungen m
WHERE
    m.status IN ('Betreiber informiert', 'Betreiber informiert(manuell)') AND
    TIMESTAMPDIFF(SECOND, Meldungszeitpunkt, NOW()) > 172800;
请注意,我使用
WHERE IN
来避免
s与
s之间的操作顺序问题
的优先级高于
,因此您原来的
WHERE
子句的实际计算结果如下:

WHERE
    status = 'Betreiber informiert' OR
    (status = 'Betreiber informiert(manuell)' AND
     DATEDIFF(NOW(), Meldungszeitpunkt) > 172800)

172800
是两整天的秒数。如果您真的想这样做,那么应该使用
TIMESTAMPDIFF

SELECT m.*
FROM meldungen m
WHERE
    m.status IN ('Betreiber informiert', 'Betreiber informiert(manuell)') AND
    TIMESTAMPDIFF(SECOND, Meldungszeitpunkt, NOW()) > 172800;
请注意,我使用
WHERE IN
来避免
s与
s之间的操作顺序问题
的优先级高于
,因此您原来的
WHERE
子句的实际计算结果如下:

WHERE
    status = 'Betreiber informiert' OR
    (status = 'Betreiber informiert(manuell)' AND
     DATEDIFF(NOW(), Meldungszeitpunkt) > 172800)


当您混合使用和/或时,查询会变得混乱。最好使用括号来分隔特定的逻辑。
172800
应该代表什么?您的问题不清楚。请以秒为单位计算天数请不要使用这样的屏幕截图,而是转储
SHOW create table table name
的create table结果,而不是在混合和/或时,查询会变得混乱。最好使用括号来分隔特定的逻辑。
172800
应该代表什么?你的问题不清楚。请不要使用这样的屏幕截图,转储
SHOW create table table name
的create table结果,而改为“嗯?172800是什么?试试这个:”-我希望一个代表性很低的成员能给出这样的答案。lol@user2864740 . . . 这是因为明显的变化将发生在日期比较上。中的
只是一种简化。这不是Gordon的失误……他的SQL级别相当高,因此像操作顺序这样的琐碎事情可能不值得注意(答案是向上投票)。@TimBiegeleisen我知道这一点。但是这样看吧。如果答案来自新会员或低代表性会员,你会怎么做?我以前见过这样的答案,他们得到了很多反对票。现在要诚实。@FunkFortyNiner。我真的不知道
172800
datediff()值与2天有什么关系。也许OP可以提供启示,尽管这不是获得正确的查询逻辑所必需的。“哈?172800是什么?试试这个:”-我希望一个代表性很低的成员能给出这样的答案。lol@user2864740 . . . 这是因为明显的变化将发生在日期比较上。
中的
只是一种简化。这不是Gordon的失误……他的SQL级别相当高,因此像操作顺序这样的琐碎事情可能不值得注意(答案是向上投票)。@TimBiegeleisen我知道这一点。但是这样看吧。如果答案来自新会员或低代表性会员,你会怎么做?我以前见过这样的答案,他们得到了很多反对票。现在要诚实。@FunkFortyNiner。我真的不知道
172800
datediff()值与2天有什么关系。也许OP可以提供启示,尽管这不是为查询获得正确逻辑所必需的。虽然这改变了逻辑(可能是,也可能不是OPs问题),“(A和C)或(B和C)”可以更简单地写为“(A或B)和C”,以避免重复。是的,您也可以这样做,但我喜欢把它组织起来,这样我可以单独改变一切,同时改变逻辑(可能是也可能不是老年退休金计划的问题),“(A和C)或(B和C)”可以更简单地写为“(A或B)和C”,以避免重复。是的,你也可以这样做,但我喜欢组织它,这样我就能改变一切individually@user2864740这是AFAIK的预期逻辑。如果你有理由不这样认为,那么展示一些证据。更新涵盖了“IN”开关-我唯一的问题是缺乏解释。@user2864740这是AFAIK的预期逻辑。如果你有理由不这么认为,那么展示一些证据。更新涵盖了“IN”开关-我唯一的问题是缺乏解释。