按日期获取行" index"停止当前ID

时间:2018-03-30 00:48:12

标签: php sql laravel laravel-5

1-我很抱歉这个头衔,我无法更好地描述我的复杂情况。

2-我有一个双重会计系统的表格,我试图计算特定日期的余额,直到特定的交易,并且由于前端的具体情况我需要得到一个结果单一查询。

表示例如下:

| id  | date       | amount |
| --- | ---------- | ------ |
| 93  | 2018-03-02 | -200   |
| 94  | 2018-01-23 | 250    |
| 108 | 2018-03-05 | 400    |
| 120 | 2018-01-23 | 720    |
| 155 | 2018-03-02 | -500   |
| 170 | 2018-03-02 | 100    |

这是我在每个事务的循环中使用的简单查询,因为我想在每次事务处理后显示新的BALANCE:

... for ...

Transactions::where('date', '<=', $item->date)->get()

... end ...

该查询在当天结束时返回余额,表示直到当天的最后一笔交易,我不想要此结果。

期望的结果是通过以下方式实现的:

 ... for ...

Transactions::where('date', '<=', $item->date)
-> and transaction is < index of current $item
->get()

... end ...

当然我无法使用该ID,因为在这种情况下ID与此无关,因为整个排序和计算操作都与日期有关。

基本上我想要的是一个查询,以获取从石器时代到特定日期的所有交易但排除在CURRENT之后(在循环中)所做的所有交易

例如,在上表情况下查询:

Transaction ID # 93 should return: 93
Transaction ID # 94 should return: 94
Transaction ID # 108 should return: 94,120,93,155,170,108
Transaction ID # 120 should return: 94,120
Transaction ID # 155 should return: 94,120,155
..
...
....

要获取的最后一个交易应该是当前交易。

我希望我能清楚地说清楚,我花了3天时间寻找解决方案,然后我想出了这个缓慢的方法:

$currentBalance = Transaction::where('date', '<=', $item->date)->get(['id']);

    $array = array();
    foreach ($currentBalance as $a) {
        $array[] = $a->id;
    }
    $newBalanceA = array_slice($array, 0, array_search($item->id, $array) + 1);

    $currentBalance = Transaction::whereIn('id', $newBalanceA)->sum('amount');

    return $currentBalance;

它很慢而且很脏,如果可能的话,我很感激在一个查询中用一个简单的解决方案来保存我。

0 个答案:

没有答案