gpt4 book ai didi

php - 将多个月中的多个数据库表条目链接在一起

转载 作者:行者123 更新时间:2023-11-29 08:47:36 24 4
gpt4 key购买 nike

我正在开发个人理财追踪器(好玩!),并且有一个类别表。每个类别都是该表中的一个条目,在月末它们都会重复,其相关余额会重置为新月的月初。

其中,这些类别可以是“储蓄”类型,因此可以连续运行。如果我想检索或更新类别,则可以使用category_id字段,该字段在当前工作月份可以正常使用,但是将月份链接在一起会伤脑筋。对于储蓄类别,我想显示在过去六个月中running_total的增加情况,但是在我当前的数据库设计中,由于每个月初都是新创建的类别,因此类别“不知道”它们的前几个月。

目前,我可以检索储蓄的最后6个月的唯一方法running_total是按类别名称进行搜索,但这可能不可靠。

我曾考虑过在表中添加一个字段“ previous_month_category_id”,该字段可以用作将类别链接在一起的一种方法,但是实现起来会很昂贵,因为每次从结果中获取“ previous_month_category_id”都需要6次MSQL操作,然后重新运行查询。

如果MYSQL可以进行某种递归,那么也许可以行得通,但是我觉得还有一个更明显的答案盯着我。

我正在使用Codeigniter和MYSQL,但是如果需要的话,也不会害怕普通的PHP。

有关如何执行此操作的帮助将非常有用。

更新1:

以下是储蓄类别与其他类别混合后的示例。在每个月末,该条目将使用相同的category_name,type,buget,year和users_id复制,但是category_id自动递增,月份更新为新的月份号,并且运行总计是先前的running_total +预算。在不使用category_name的情况下,如何执行一个数据库查询来检索这些查询?由于这可能会改变,因此用户决定在7月底将其称为“更大的电视”

+-------------+--------------+------+--------+---------------+------+-------+----------+
| category_id |category_name | type | budget | running_total | year | month | users_id |
+-------------+--------------+------+--------+---------------+------+-------+----------+
| 44 | Big TV | sav | 20 | 240 | 2012 | 8 | 77 |

+-------------+--------------+------+--------+---------------+------+-------+----------+
| 32 | Big TV | sav | 20 | 220 | 2012 | 7 | 77 |

+-------------+--------------+------+--------+---------------+------+-------+----------+
| 24 | Big TV | sav | 20 | 200 | 2012 | 6 | 77 |


更新2:

我不确定自己是否会很好地解释自己,所以我将在应用程序的工作方式上做一些详细说明,看看是否有帮助。

我有称为“类别”,“交易”和“用户”的表。类别可以是以下三种类型之一:1,现金,2:定期付款,3:储蓄。将现金和常规付款类型视为存储桶,每个月初每个存储桶都已装满,目的是从中取出钱,并确保在月底还剩下一点钱(或至少没有)负)。

每月一个月都可以,而且效果很好(对我来说,我认为这个系统已经使用了两年了)。此行带有“储蓄”功能,因为它们逐月链接,更像是每个月都添加一个大存储桶(以固定的增量称为预算),直到溢出,然后耗尽(就像大电视在您购买时一样)它),或者从这里到那里取一点,目的是建立一个应急基金(例如“当我的汽车发生故障时”之类的东西)。

当显示每个类别的相关信息时,仅显示当月的现金和定期的,这很重要,对于节省而言,虽然也会显示当前金额,但是最好显示一个小的历史记录图随着时间的流逝,它已经积累(或耗尽)。为此,我需要某种方式来搜索这些类别的月末状态,以便可以绘制该图,但是目前我无法确定如何通过category_name以外的其他任何方式链接它们。

我试图实现一些数据库规范化,但这是我实现的关于规范化的第一个方案,因此我可能错过了它的某些方面,并且可能避免了在感觉不正确的情况下进行的任何过度规范化。

以下是我的表格:

类别

 +-------------+--------------+------+--------+---------------+------+-------+----------+
| category_id |category_name | type | budget | running_total | year | month | users_id |
+-------------+--------------+------+--------+---------------+------+-------+----------+


交易

+----------------+--------------+--------+------+----------+------------------------+
| transaction_id | description | amount | date | users_id | categories_category_id |
+----------------+--------------+--------+------+----------+------+-------+---------+


它们在category_category_id上联接,这是一个外键

我一直在以每个类别每个月都需要一个新条目的前提为前提,但是从下面的评论和答案看来,我最好只拥有一个类别条目,而与月份无关,然后即时计算所有内容?

虽然预算可以由用户更改,所以为了保存记录,我不确定这是否也会奏效,“存款”从未真正发生过,只是该类别在月底重复,所以我想那会需要处理.....

该应用程序的目标始终是将财务跟踪与银行帐户中发生的实际交易分离开来,并在某人的财务状况上提供一层,从而使用户避免难以解释的交易等,而仅关注所有现金头寸。该系统中没有“收入”或银行帐户的概念。

最佳答案

在我看来,您的数据库设计可能需要一些工作。我仍然不完全了解您实际上要做什么,但是我的最初想法是将每个事务存储为表中的一行,然后以不同的方式查询该表以生成不同类型的报告。它。像这样:

transactions:
+----+---------+--------+---------------+-----------+-------------+
| id | user_id | amount | running_total | datestamp | category_id |
+----+---------+--------+---------------+-----------+-------------+

categories:
+----+------+------+
| id | name | type |
+----+------+------+


不要根据时间增加类别。当您实际上有一个新类别时,将一个条目添加到类别表。如果某笔交易可能属于多个类别,则使用第三个(关系)表,该表格将交易(基于交易ID)与类别(基于类别ID)相关联。

当您有存款时, amount字段将为正,对于提款,它将为负。您可以通过执行以下操作来获取当前的运行总计:

SELECT running_total FROM transactions
WHERE id = (SELECT MAX(id) FROM transactions WHERE user_id = '$userID');


您可以通过执行以下操作找到特定月份的总差额:

SELECT SUM(amount) FROM transactions WHERE DATE('%c', datestamp) = '$monthNumber';


您可以通过执行以下操作找到特定类别的总支出:

SELECT SUM(t.amount) FROM transactions t
INNER JOIN categories c ON t.category_id = c.id WHERE c.name = 'Big TV';


还有许多其他可能性,但是这里的目的只是演示一种可能更好的存储数据的方法。

关于php - 将多个月中的多个数据库表条目链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com