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_Database Design - Fatal编程技术网

Php 数据库-每月跟踪费用

Php 数据库-每月跟踪费用,php,database-design,Php,Database Design,我有以下数据库: Clients(ClientID, ...) Rooms(RoomID, ...) Rents(RentID, ClientID, RoomID, StartDate, EndDate, Cost) 费用为每月费用(每月支付)。我希望从应用程序创建时开始,每月跟踪每个租金。随着时间的推移,新的月份应该增加。 我怎样才能做到这一点 示例:租金从3月份开始,费用为200欧元。3个月后,我应支付此租金: March - 200€ April - 200€ May - 200€ M

我有以下数据库:

Clients(ClientID, ...)
Rooms(RoomID, ...)
Rents(RentID, ClientID, RoomID, StartDate, EndDate, Cost)
费用为每月费用(每月支付)。我希望从应用程序创建时开始,每月跟踪每个租金。随着时间的推移,新的月份应该增加。 我怎样才能做到这一点

示例:租金从3月份开始,费用为200欧元。3个月后,我应支付此租金:

March - 200€
April - 200€
May - 200€
March - 200€
April - 300€
May - 300€
考虑到租赁房间的成本可能会随着时间的推移而变化,以及客户拥有的房间

我在设计数据库方面几乎没有经验,所以我不知道如何做到这一点。 谢谢

更新

应自动添加新月份

比如说,4月份我决定将成本改为300欧元。然后,该租金应显示:

March - 200€
April - 200€
May - 200€
March - 200€
April - 300€
May - 300€

如果客户决定换房间,将创建一个新的租金记录。最后,我应该能够查看客户的所有费用。

我可能只在实际收到租金时记录租金,而不是自动生成记录

<> P>但要自动生成记录,考虑只存储时间戳成本更改,然后在PHP中生成月跟踪。您可以通过在数据库中查找相对于该日期的最新成本更改来确定任何给定日期的成本。我会将成本变化与
RentID
一起存储在一个单独的表中

但是,如果要为每个月插入数据库行,有一个想法:


考虑为费用历史记录创建一个单独的表。
Rents
表中每个客户/房间有一行,
History
表中每个客户/房间每月有一行

每当需要显示时,向
历史记录
表中添加必要的记录。例如,假设您在一月份创建了一个客户的租金。当您在5月份检查他们的历史记录时,系统会在显示列表之前插入2月、3月、4月和5月的所有必要记录

当您更改成本时,它将更新该客户/房间的
租金
行。新成本将用于后续的
历史记录

我不知道您正在使用哪种类型的数据库,也不知道您如何访问它,因此我将通过硬编码数据库值来演示:

<?php

// Fetch the latest `Rents` rows for a particular `ClientID` and `RoomId`.
// $latest = $db->fetch(...);

$latest = [
   'startDate'=>'2019-11-25',
   'cost'=> 200
];

// Define the start date and current date
$startDate = new DateTime($latest['startDate']);
$currentDate = new DateTime(date('Y-m-d'));

// define monthly interval and periods
$interval = DateInterval::createFromDateString('1 month');
$periods = new DatePeriod($startDate, $interval, $currentDate);

// interate through periods ...
foreach ($periods as $period) {
    // ... and insert a new record with the date from $period and cost from $latest
    $records[] = ['date'=>$period->format('Y-m-d'),'cost'=>$latest['cost']];
}

// Fetch and display all `Rents` rows for that `ClientID` and `RoomId`
echo "<pre>".print_r($records,true)."</pre>";

我可能只在实际收到租金时记录租金,而不是自动生成记录

<> P>但要自动生成记录,考虑只存储时间戳成本更改,然后在PHP中生成月跟踪。您可以通过在数据库中查找相对于该日期的最新成本更改来确定任何给定日期的成本。我会将成本变化与
RentID
一起存储在一个单独的表中

但是,如果要为每个月插入数据库行,有一个想法:


考虑为费用历史记录创建一个单独的表。
Rents
表中每个客户/房间有一行,
History
表中每个客户/房间每月有一行

每当需要显示时,向
历史记录
表中添加必要的记录。例如,假设您在一月份创建了一个客户的租金。当您在5月份检查他们的历史记录时,系统会在显示列表之前插入2月、3月、4月和5月的所有必要记录

当您更改成本时,它将更新该客户/房间的
租金
行。新成本将用于后续的
历史记录

我不知道您正在使用哪种类型的数据库,也不知道您如何访问它,因此我将通过硬编码数据库值来演示:

<?php

// Fetch the latest `Rents` rows for a particular `ClientID` and `RoomId`.
// $latest = $db->fetch(...);

$latest = [
   'startDate'=>'2019-11-25',
   'cost'=> 200
];

// Define the start date and current date
$startDate = new DateTime($latest['startDate']);
$currentDate = new DateTime(date('Y-m-d'));

// define monthly interval and periods
$interval = DateInterval::createFromDateString('1 month');
$periods = new DatePeriod($startDate, $interval, $currentDate);

// interate through periods ...
foreach ($periods as $period) {
    // ... and insert a new record with the date from $period and cost from $latest
    $records[] = ['date'=>$period->format('Y-m-d'),'cost'=>$latest['cost']];
}

// Fetch and display all `Rents` rows for that `ClientID` and `RoomId`
echo "<pre>".print_r($records,true)."</pre>";

是否应自动添加新月份的租金,还是每月手动添加新租金?你是如何改变成本的?是的,是自动的(我错过了那个词)。只要需要,应用程序中的管理员就会更改成本。我不确定哪里是最好的地方,但我想它在租金中。每次设置租金成本时,您能指定
StartDate
EndDate
吗?或者成本可能是开放式的,并且没有指定的
结束日期
?否。开始日期在创建租金时设置,结束日期在租金结束时设置(当客户更换房间或明确离开时)。这些日期应该给我一个谁在特定房间的历史记录。有效租金的EndDate为空。是否应自动添加新月份的租金,还是每月手动添加新的租金?你是如何改变成本的?是的,是自动的(我错过了那个词)。只要需要,应用程序中的管理员就会更改成本。我不确定哪里是最好的地方,但我想它在租金中。每次设置租金成本时,您能指定
StartDate
EndDate
吗?或者成本可能是开放式的,并且没有指定的
结束日期
?否。开始日期在创建租金时设置,结束日期在租金结束时设置(当客户更换房间或明确离开时)。这些日期应该给我一个特定房间的历史记录。有效租金的结束日期为空。有一个单独的系统来处理付款,这个系统只有每月的价值,仅供一般阅读。谢谢你的回答。这是一个可能的解决方案,但不是我想要的。我希望每月将租金成本加到db中。我想我可以有一个脚本来添加记录,并在每月的第一天使用cron job执行它。我只是不确定db表的结构。你想做以下工作吗?费用(支出ID、客户ID、房间ID、成本、日期)。我不知道该如何确定日期。有一个单独的系统来处理付款,这个系统只有用于一般阅读目的的每月值。谢谢你的回答