whereNotBetween给我错误

时间:2018-08-19 16:45:21

标签: php sql laravel laravel-query-builder

我正在尝试编写whereNotBetween查询,但我不知道我的错误在哪里。它没有给我结果。我知道在whereNotBetween行附近写东西是错误的。没有其他示例。

$values = DB::table('exchanges')
            ->leftJoin('trades', 'exchanges.id', '=', 'trades.exchange_id')
            ->select('trades.*')
            ->where('trades.user_id', $user)

           ->whereRaw('TIME(trades.tradedate) NOT BETWEEN exchanges.start_time AND exchanges.close_time')


            ->get();
  

“ where子句”中的未知列“ trade_date”(SQL:从exchangestrades的{​​{1}}左联接exchanges,选择TIME(trades.tradedate)AS trade_date。id = tradesexchange_id,其中tradesuser_id = 1和trade_date不在exchanges.start_time和exchanges.start_time之间

如果tradedate> $ start_time而$ tradedate <$ close_time,我想要结果。

table exhcnages table trades

这是在范围之间..但它给了我结果:

 #items: array:69 [▼
0 => {#1106 ▼
  +"id": 3
  +"exchange": "NSE"
  +"created_at": "2018-04-18 13:00:23"
  +"updated_at": "2018-08-14 06:48:24"
  +"deleted_at": null
  +"start_time": "09:15:00"
  +"close_time": "03:30:00"
  +"country_id": null
  +"user_id": 1
  +"symbol_id": 7
  +"exchange_id": 1
  +"market_id": 1
  +"is_action": 1
  +"rate": 13234
  +"tradedate": "2018-06-21 09:20:00"
  +"note": "Kinnari updated"
  +"quantities": 456
  +"stoploss": 6465

1 个答案:

答案 0 :(得分:1)

您必须使用Raw查询,因为您使用的是别名,所以您将无法使用该查询,因为trade_date列不存在,所以是别名...因此您必须直接使用子查询,例如:{ {1}}

我假设您有一个end_time列...您必须为...之间定义一个范围...如果没有,则直接使用whereRaw('NOT (TIME(trades.tradedate) BETWEEN exchanges.start_time AND exchanges.end_time)')IS EQUAL运算符...

**编辑2 **

您的范围对于BETWEEN比较无效。

如果交换在一天的09:00 AM开始并在第二天的03:00 AM结束

9到3之间没有任何值,这是因为该范围必须增大。 9AM到3PM是无效范围。

为此,您需要一个更复杂的查询...

类似

=

此查询的操作非常简单,它比较日期是否在有效日期之间,如果期间在同一天,则只是追加相同的日期,如果期间不在同一天,则追加用date_add 1天伪造的日期