【问题标题】:Calculating a time and comparing it with a mysql time in PHP计算时间并将其与 PHP 中的 mysql 时间进行比较
【发布时间】:2012-07-29 07:06:35
【问题描述】:

PHP:

$current = time();
$time_ago = $current - 45*60; // get the time 45 mts ago.

MySQL:

我有一个表状态,其中有一个日期时间列“已修改”;

我正在尝试查询表以获取修改时间低于$time_ago;的行

我的 PHP 代码:

$this->db->select("(SELECT UNIX_TIMESTAMP(status.modified) FROM status WHERE status_id = 0) AS modified_timestamp" , FALSE);
        $this->db->from('status');
        $this->db->where('status_id', 0);
        $this->db->where('modified_timestamp <', $time_ago);
        $this->db->limit(25);
        $q = $this->db->get();

得到一个数据库错误:

“where 子句”中的未知列“modified_timestamp”

SELECT 
    (SELECT UNIX_TIMESTAMP(status.modified) FROM status WHERE status_id = 0) AS modified_timestamp 
    FROM (status) WHERE `status_id` = 0 AND `modified_timestamp` < 1343542758 LIMIT 25

【问题讨论】:

  • modified_timestamp 是临时表而不是列
  • 错误本身是非常具有描述性的,表中不存在 modified_timesatamp 列检查您的拼写
  • Brandon,感谢您指出这一点.. 这是一个临时表。我的sql很生锈。我将如何编写此查询?有什么想法吗?

标签: php mysql codeigniter datetime unix-timestamp


【解决方案1】:

您意识到可以在 where 子句中使用 UNIX_TIMESTAMP(),对吧?

$this->db->select("UNIX_TIMESTAMP(modified)" , FALSE);
$this->db->from('status');
$this->db->where('status_id', 0);
$this->db->where('UNIX_TIMESTAMP(modified) <', $time_ago);
$this->db->limit(25);
$q = $this->db->get();

注意:可能无法按原样工作,我没有使用过这个特定的 DB API,但你明白了。

【讨论】:

  • 感谢您分享您的想法。我会试试看。我不知道我可以在 where 子句中使用 UNIX_TIMESTAMP。
  • 酷,很高兴听到它!如果您同意,您可以接受答案。
【解决方案2】:
$this->db->from('status');
$this->db->where('status_id', 0);
$this->db->where('UNIX_TIMESTAMP(modified) <', $time_ago);
$this->db->limit(25);

【讨论】:

  • 非常感谢..我会试试看..我不知道我们可以在 where 子句中使用 unix_timestamp
  • 只需使用 SilverbackNet 的查询就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
相关资源
最近更新 更多