Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多个月的多个数据库表项链接在一起_Php_Mysql_Database_Web Applications - Fatal编程技术网

Php 将多个月的多个数据库表项链接在一起

Php 将多个月的多个数据库表项链接在一起,php,mysql,database,web-applications,Php,Mysql,Database,Web Applications,我正在开发一个个人金融跟踪器(为了好玩!),我有一个分类表。每个类别都是表中的一个条目,在月末,它们都会被复制,其相关余额重置为新月份的月初读数 其中,这些类别可以是“储蓄”类型,因此有一个连续的总数。如果我想检索一个类别或更新它,那么我使用了category_id字段,这在当前工作月份可以正常工作,但是将月份链接在一起会让我的大脑崩溃。对于储蓄类别,我想说明在过去的六个月里,持续的储蓄总额是如何增加的,但在我当前的DB设计中,类别不“知道”他们以前的月份,因为它们在每个月初被创建为新的 目前,

我正在开发一个个人金融跟踪器(为了好玩!),我有一个分类表。每个类别都是表中的一个条目,在月末,它们都会被复制,其相关余额重置为新月份的月初读数

其中,这些类别可以是“储蓄”类型,因此有一个连续的总数。如果我想检索一个类别或更新它,那么我使用了category_id字段,这在当前工作月份可以正常工作,但是将月份链接在一起会让我的大脑崩溃。对于储蓄类别,我想说明在过去的六个月里,持续的储蓄总额是如何增加的,但在我当前的DB设计中,类别不“知道”他们以前的月份,因为它们在每个月初被创建为新的

目前,我唯一能够检索最近6个月运行的储蓄总额的方法是按类别名称进行搜索,但这可能不可靠

我曾考虑向表中添加一个字段,即“上一个月的类别id”,它可以作为将类别链接在一起的一种方式,但实现起来很昂贵,因为每次从结果中获取“上一个月的类别id”,然后重新运行查询时,需要6个MSQL操作

如果MYSQL可以进行某种递归,那么这可能会奏效,但我觉得有一个更明显的答案摆在我面前

我正在使用Codeigniter和MYSQL,但如果需要的话,我并不害怕香草PHP

关于如何做到这一点的帮助将是巨大的

更新1:

下面是一个储蓄类别的示例,它可能与其他类别混合在一起。在每个月底,该条目将以相同的类别名称、类型、buget、年份和用户id进行复制,但类别id会自动递增,月份更新为新的月号,并且运行总数是上一个运行总数+预算。如何在不使用类别名称的情况下执行一次数据库查询来检索这些内容?由于这种情况可能发生变化,用户决定在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:储蓄。将现金和定期付款类型视为桶,每个月初每个桶都满了,目的是从桶中取出钱,确保月底还有一点剩余(或者至少不是负的)

这是一个月一个月的基础上很好,工作得很好(对我来说,我已经使用这个系统两年了,我想)。旅行伴随着储蓄而来,因为它们是按月联系在一起的,更像是每月增加一个大水桶(有一个固定的称为预算的增量),直到它超支,然后耗尽(就像你买它时大电视一样),或者从这里或那里取一点点,目的是建立一个应急基金(比如“当我的车坏了”之类的话)

当显示每个类别的相关信息时,仅显示现金和定期的当月,因为这才是最重要的,但对于储蓄而言,也会显示当前金额,但最好显示一个小的历史图表,说明它是如何累积(或耗尽)的要做到这一点,我需要一些方法来搜索这些类别的上一个月末状态,以便可以绘制图表,但目前我无法确定如何通过类别名称以外的任何东西将它们链接起来

我已经尝试实现了一点DB规范化,但这是我实现的第一个了解规范化的模式,所以我可能错过了它的一些方面,并且可能避免了任何感觉不正确的过度规范化

以下是我的表格:

类别

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

+----------------+--------------+--------+------+----------+------------------------+
| transaction_id |  description | amount | date | users_id | categories_category_id |
+----------------+--------------+--------+------+----------+------+-------+---------+
它们在categories\u category\u id(外键)上连接

我一直认为每个类别每个月都需要一个新的条目,但从下面的评论和答案来看,我最好是不分月份只输入一个类别条目,然后快速计算所有内容

虽然,预算可以由用户更改,因此为了保存记录,我不确定这是否也会起作用“存款”从未真正发生过,只是在月末复制了类别,所以我想这需要处理


该应用程序的目的一直是将财务跟踪与银行账户中发生的实际交易分离,并为某人的财务提供一个层次,从而允许用户避免难以解释的交易等,只关注全部现金状况。没有“收入”的概念“在这个系统中,或者在银行帐户中。

在我看来,您的数据库设计可能需要一些工作。”。我仍然不完全熟悉您真正想要做的事情,但我最初的想法是将每个事务存储为表中的一行,然后以不同的方式查询该表以生成不同类型的报告。大概是这样的:

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

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


不要根据时间增加类别。当您实际拥有一个新类别时,向categories表添加一个条目。如果一个事务可能属于多个类别,那么使用第三个(关系)表将事务(基于事务ID)与类别(基于类别ID)关联起来

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

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';
您可以通过以下方式找到特定类别的总支出