当日期刚保存为 UNIX 时间戳时,MySQL 过滤特定日期

1 php mysql database timestamp date

我正在使用 PHP 访问 MySQL 数据库。我有一个这样构建的表:

表头:

  • id(INT,自动递增),profileid,时间戳

表内容:

  • 1, 12345678, 1513814399 (= 12/21/2017)
  • 2, 13451983, 1513814400 (= 12/21/2017)
  • 3, 12345678, 1513944000 (= 12/22/2017)
  • 4, 12345678, 1513944001 (= 12/22/2017)

该表显示了网站访问者在哪个时间调用了哪些 profileid。

所以我现在的问题是,如何显示例如:“给我 2017 年 12 月 22 日调用的 12345678 号配置文件的条目数”,在这种情况下为“2”。

我用这个查询试过了:

SELECT COUNT(profileid), from_unixtime(timestamp, '%d') AS day, from_unixtime(timestamp, '%m') as month, from_unixtime(timestamp, '%Y') as year WHERE profileid='12345678' AND day=22 AND month=12 AND year=2017;
Run Code Online (Sandbox Code Playgroud)

但是无法访问列“day”、“month”和“year”,因为它们不存在于表中。

有人可以给我一个提示如何做到这一点吗?另一种方法是创建三个新列(timestamp_day、timestamp_month 和 timestamp_year),但这不是一个好的解决方案。

先感谢您!

特哈

Gor*_*off 5

只生产日期。我想你想要:

SELECT COUNT(profileid)
FROM t
WHERE DATE(from_unixtime(timestamp)) = '2017-12-22' AND
      profileid = '12345678';
Run Code Online (Sandbox Code Playgroud)

我更倾向于将其写为:

SELECT COUNT(profileid)
FROM t
WHERE profileid = '12345678' AND
      timestamp >= UNIX_TIMESTAMP('2017-12-22') AND
      timestamp < UNIX_TIMETAMP('2017-12-23');
Run Code Online (Sandbox Code Playgroud)

这允许查询充分利用 上的索引t(profileid, timestamp)