mysql - Eloquent orm或sql语句

标签 mysql orm laravel eloquent

我正在尝试从交易表中获取当天的借方总额、贷方总额和可用余额。

到目前为止我已经尝试过......

        SELECT
        sum(credit),
        sum(debit),
                sum(credit) - sum(debit) as remaining_balance
                FROM transactions
    WHERE user_id = 2
group by created_at;

它没有给出正确的结果。

SQL FIDDLE...

http://sqlfiddle.com/#!2/25a27/2

例如,我想要获得银行/ Paypal 对账单等结果...

Date  - Debit - Credit - Balance
05/11 - 2.20  -        - 7.3
05/10 -       - 1.5    - 9.5
05/06 -       - 2.5    - 8
05/05 -       - 5.5    - 5.5

我正在使用 laravel eloquent orm,所以如果可以通过 ORM 实现,这对我来说是一个很好的建议。谢谢

最佳答案

您可以使用相当简单的 JOIN 来解决它;

SELECT DATE(a.created_at) date, a.debit, a.credit, 
  SUM(b.credit - b.debit) balance
FROM transactions a
LEFT JOIN transactions b
  ON DATE(a.created_at) >= DATE(b.created_at)
GROUP BY DATE(created_at)
ORDER BY DATE(created_at) DESC

An SQLfiddle to test with .

这里的问题是 JOIN 条件和 GROUP BY 条件使用在字段上计算的值,而不是使用字段本身。这将限制索引的使用,并使大量数据的查询变得非常慢。

解决方案是添加一个单独的 DATE 字段来保存交易日期。这将允许 JOIN/GROUP BY 直接在字段上工作,并且可以更有效地使用索引。

关于mysql - Eloquent orm或sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23592329/

相关文章:

mysql - 在 EventMachine 中启动挂起的 MySQL2 连接

php - MySQL 查询不返回任何内容

mysql - 对 MYSQL 查询中的记录进行分组 - 不显示每个结果

mysql - 在 El Capitan 上退出 MySQL 而不重新启动

php - MySQL 在 PHP 上使用外键显示结果

php - 如何从不同的表中减去两个整数值

java - 为什么 Hibernate 的 createQuery 和 createCriteria 返回不同数量的对象?

mysql - Scala slick执行复杂的sql查询

java - Hibernate 使用 Equals 生成 POJO

php - 流明 ->withErrors($validator)