【问题标题】:Count Columns query with between specific time在特定时间之间计算列查询
【发布时间】:2018-06-03 16:11:43
【问题描述】:

有两个表,分别命名为exchanges tablefinaltrades table

Exchanges 表有 START_TIME 字段(格式为:00:00:00)。

另一个 finaltrades 表有 exchange_id

我只想计算最终交易表中 start_time 到 start_time+1hrs 之间的条目。 举例:如果 start_time 有 09:15:00,则只计算 09:15:00 到 10:15:00 之间的记录。

$Count_Trades = FinalTrade::where('user_id', '=', $user_id)
                             ->whereColumn('start_time', '+', 01:00:00)
                             ->count();

如何按关系更正此代码?

Exchnages table

finaltrade table

【问题讨论】:

  • 您所说的“从 start_time 到 start_time+1 小时从最终交易开始”是什么意思? finaltrades 是否也有 start_time 列?
  • finaltrade 没有 start_time 但是,我想与具有 start_time 的交换表建立关系,但 finaltrade 表具有 exchange_id。我还为您添加了示例。 @JonasStaudenmeir
  • 请添加两个表格的示例日期和预期结果。
  • 我添加了两张表的截图@JonasStaudenmeir
  • 您希望从这些数据中得到什么结果?你想计算交易或交易所吗?

标签: laravel laravel-5.3 laravel-query-builder


【解决方案1】:

您应该定义 FinalTrade 模型和 Exchanges 模型之间的关系。

这定义了 FinalTrade 模型中的关系。

public function exchanges(){
    return $this->hasOne('App\EXCHANGE_MODEL_NAME', 'id', 'exchange_id');
}

您可以在here找到更多关于关系的详细信息。

现在您可以使用此查询找到您的记录

$countTrades = App\FinalTrade::where('user_id', '=', $user_id)->exchanges()
    ->where('start_time', '>=', $your_desired_time)->where('start_time' , '<=' , strtotime($your_desired_time) + 60*60)->count();

【讨论】:

  • 我想在 start_time 中增加 1 小时。例如:如果 start_time 为 09:15:00,则仅计算 09:15:00 到 10:15:00 之间的记录...如果 start_time 在交换表中为 7:00:00,则计算条目 7:00: 00 至 8:00:00 @Masoud Haghbin
猜你喜欢
  • 1970-01-01
  • 2012-10-21
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多