【问题标题】:Convert SQL query to Laravel way(unix timestamp problem!!)将 SQL 查询转换为 Laravel 方式(unix 时间戳问题!!)
【发布时间】:2019-12-25 13:46:48
【问题描述】:

我正在尝试将此 SQL 查询转换为 Laravel 查询。

SELECT count(*) FROM (SELECT order_id FROM table1 WHERE app_process='7' AND ( service_type='lite' OR ((end_time-".time().")/86400)>'0') ) a INNER JOIN (SELECT order_id FROM table2 WHERE process='1' AND amount>'0' GROUP BY order_id) b ON a.order_id=b.order_id

我几乎成功(?)转换但我不知道如何转换时间部分。

end_time-".time().")/86400

我转换的内容

Db::table('table1 as A')
->select('A.order_id')
->where('A.app_process', '=', '7')
->where('A.service_type', '=', 'lite') 
->orWhere('A.end_time', '>', '0')  <== problem here!!
->join(Db::raw('(select order_id from table2 where process = 1 and amount > 0 group by order_id) B'), 'B.order_id', '=', 'A.order_id')
->count();

有人可以帮我解决时间部分吗?

【问题讨论】:

  • 你想用时间部分实现什么?看起来它可以简单得多。
  • 希望这会有所帮助。Stackoverflow question
  • @Jerodev 我不确定,因为我不是编写 sql 查询的人,但“end_time”是 unix 时间戳。所以,我认为距离 end_time 可能还有几天的时间。
  • @farooq 很抱歉,我在那里找不到具体有用的东西...
  • 显示您的数据库 end_time 文件格式?

标签: php sql laravel


【解决方案1】:

我终于找到了正确的查询。事实证明,问题不仅在于 'time()',还在于错误的转换查询。 我发布这个可能会对某人有所帮助。

Db::table('table1 as A')
->leftJoin('table2 as B', 'A.order_id', '=', 'B.order_id')
->where('A.app_process', '=', '7')
->where(function($query){
  $query->where('A.service_type', '=', 'lite')->orWhere('A.end_time', '>', time());
})
->where('B.process', '=', '1')
->where('B.amount', '>', '0')
->distinct()
->count('A.order_id');

【讨论】:

    【解决方案2】:

    试试这个,我认为它对你有帮助

    Db::table('table1 as A')
    ->select('A.order_id')
    ->where([['A.app_process', '=', '7'],['A.service_type', '=', 'lite']])
    ->orWhere('A.end_time', '>', now())
    ->join(Db::raw('(select order_id from table2 where process = 1 and amount > 0 group by order_id) B'), 'B.order_id', '=', 'A.order_id')
    ->count();
    

    【讨论】:

    • @Boymurodov 你的意思是“结束时间”?这是unix时间戳。 1366800497等值。数据库表中设置为整数的字段类型。
    • 试试这个碳类 $time = Carbon::createFromTimestamp($timestamp); $timestamp 是你的 unix 时间
    • 抱歉,我在哪里可以试试“$time”?
    • 你是要从 unixtime 转换为 date 还是从 date 转换为 unix
    • 我不明白你的意思。我只想获得与原始查询完全相同的值。比如 1413385199(end_time value) 减去 1566442100(time value) 再除以 86400 就是负的 1771。但是我不知道如何在 laravel 查询中减去 time() 值。
    【解决方案3】:

    据我了解查询,它只是检查end_time 是否在未来。因此,您可以执行以下操作:

    ->orWhere('A.end_time', '>', now())
    

    now() 是一个返回当前日期时间的 Laravel 助手。

    【讨论】:

    • 结果与零相同...嗯...可能我的转换查询不正确。你能看一下整个查询吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2018-03-03
    • 2014-08-21
    • 2015-09-08
    • 2013-04-07
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多