【问题标题】:Date matching loop日期匹配循环
【发布时间】:2015-02-03 08:07:06
【问题描述】:

我正在为员工编写时间注册表。我有两列。 Stamp_inStamp_Out。当员工注册时,一个DateTime 值存储在db 中。看起来像:$datetime_now = date('Y-m-d H:i:s'); 和注册时相等。但是在注册时,stamp_out 列中的值将是:0000-00-00 00:00:00。在stamp_in 列中注册也是如此。

现在,当我循环输出时,我喜欢匹配同一天的日期以在同一行上打印,但我不希望打印“空”日期。

这段代码应该是什么样子的?

这是我目前得到的:

PHP

//Loop out the result
while ($row = $stmt->fetch()) {
  echo "<tr>";
    echo "<td>" .$row['usr_stamp_in']."</td>";
    echo "<td>" .$row['usr_stamp_in']."</td>";
  echo "</tr>";
}

我试过了

if($row['usr_stamp_in'] != "0000-00-00 00:00:00"{
  while($row ...

【问题讨论】:

  • 而不是在您的员工注册时处理 php,为什么不在登录/注销时使用 CURRENT_TIMESTAMP 或 NOW() 之类的时间戳在您的数据库中执行它?您的查询几乎已完成,但您需要这样做:while($row = $stmt->fetch()){ if($row['usr_stamp_in']!="0000-00-00 00:00:00"){//随心所欲}}。顺便说一句,要在同一天匹配,当您从数据库中获取数据时,您需要使用 WHERE 修复它,然后 ORDER BY 并且您也应该使用 WHERE 子句从查询中删除空行;)
  • 认为您应该考虑一下您的数据库布局。
  • @Jens。是的,您正在记录事件。只需要一个日期,以及一个指示事件类型的字段。
  • 我在一家网络托管公司,服务器时间和我的不一样。所以,时间戳会给出错误的时间。否则非常有用的提示。谢谢!

标签: php mysql


【解决方案1】:

您应该在 SQL 查询中使用不等于运算符 &lt;&gt; 执行过滤器部分。 事情看起来像SELECT * FROM employee_table WHERE usr_stamp_in &lt;&gt; '0000-00-00 00:00:00'

更准确地说,有一个关于那个MySQL select where column is not empty的主题

【讨论】:

  • 我会去 != 检查是否设置了 usr_stamp_in。但好建议!
【解决方案2】:

您应该在 while 循环中执行 if 语句:

//Loop out the result
while ($row = $stmt->fetch()) {
    if ($row['usr_stamp_in'] != "0000-00-00 00:00:00") {
        echo "<tr>";
        echo "<td>" .$row['usr_stamp_in']."</td>";
        echo "<td>" .$row['usr_stamp_in']."</td>";
        echo "</tr>";
    }
}

你也可以在mysql中这样做:

SELECT *
FROM users
WHERE usr_tstamp_in != '0000-00-00 00:00:00'
ORDER BY usr_tstamp_in DESC;

这将从 'users' 表中选择没有值为 '0000-00-00 00:00:00' 的 usr_tstamp_in 的所有记录,并按日期从最新到最旧对这些记录进行排序。

我仍然建议您也使用 PHP 部分。安全总比后悔好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多