【问题标题】:Mysql unix timestamp selectMysql unix时间戳选择
【发布时间】:2012-05-30 13:00:44
【问题描述】:

我有带有订单列表的表格。每个订单都有订单日期(时间戳 1331182800)。对于每个订单,用户可以选择按 30、60 或 90 天自动重新订购(reorder field (int))。 我需要用于 cron 的 sql 来选择所有具有订单日期 = 日期 + 重新排序的订单。 (日期顺序 + 30 或 60 或 90 天)。 你能帮我解决这个问题吗?

【问题讨论】:

  • order date 是 unix 时间戳,reorder 是天数,不是吗?
  • SELECT * FROM table_name WHERE UNIX_TIMESTAMP() >= (order_time_col + (reorder_days_col * 86400))

标签: php mysql


【解决方案1】:
SELECT * FROM orders o WHERE DATE_FORMAT(DATE_SUB(NOW(), INTERVAL o.reorder DAY), '%d/%m/%Y') = DATE_FORMAT(FROM_UNIXTIME(o.date), '%d/%m/%Y')

已编辑以跳过比较的秒数。我没有 MYSQL 引擎,所以仍然可能会出现一些错误,如果是这样的话,我很抱歉给您带来不便...

【讨论】:

  • 它返回空结果。我有一个订单,订单日期为 2012 年 5 月 28 日 (1338183074),我在重新订购字段中输入了 2 我的查询是:SELECT * FROM orders WHERE date_add(NOW(), INTERVAL reorder DAY) = FROM_UNIXTIME(ord_date)
  • 查询也是比较秒数,不是明显不匹配;即将更新。
  • @Sebas I don't have a MYSQL engine - 请允许我向您介绍SQLFiddle ;-)
  • 这不是你的问题 ;) "订单日期 = 日期 + 重新订购"
【解决方案2】:

timestamp 是从 1970 年 1 月 1 日起经过的秒数 因此,为了将时间戳值转换为天数,需要将其乘以 60 * 60 * 24 (= 86400)

【讨论】:

    【解决方案3】:

    这样的事情应该可以工作:

    SELECT * FROM orders WHERE `date` < UNIX_TIMESTAMP() - reorder*86400; # returns all orders, `date` field of which is older than 90 days ago
    

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2010-11-19
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多