我有一个问题,我怎样才能创建一个存储数据的表格,并显示如下:
+-------+--+--+--+--+--+--+--+--+--+--+--+
|January|01|02|03|04|05|06|07|08|09|..|31|
| Amount| | 2| | | 1| 5| 7| | |..| 7|
| Income| |30| | |10|98|75| | |..|89|
+-------+--+--+--+--+--+--+--+--+--+--+--+
等...每个月和每年。
当然,金额和收入有一些转储数据,只显示我的意思。
我认为这个表就像在DB中创建的那样(A表示金额,I表示收入):
+--+-------+----+---+---+---+---+----+---+---+---+
|ID| month|year|01A|02A|...|31A| 01I|02I|...|31I|
|01|January|2015| | 2|...| 7| | 30|...| 89|
+--+-------+----+---+---+---+---+----+---+---+---+
不是最佳的,看起来很糟糕。像这样创建表将需要永远,并且编写代码来获取任何数据,或者在那里放置一些内容将花费更多时间。考虑二月或其他几个月没有31天的情况要糟糕得多......但在那里我可以很容易地显示每个月的空地。
我认为将这样的东西放进DB:
+--+------+------+----------+
|ID|amount|income| date|
|01| 2| 30|02/01/2015|
+--+------+------+----------+
更容易实现,但更难以像第一个表一样显示(主要是因为那些空字段)。
所以我不知道如何在MySQL中创建类似的东西。请问你能帮帮我吗?也许一些建议? 如果这会有所帮助:我在Symfony 2.6中进行编程
答案 0 :(得分:1)
您可以创建关系数据库,链接金额,日期和收入。或者您可以在示例中创建一个类似于第三个的表,但是将日期,月份和年份分开,而不是将所有日期分开。这只是一个想法!然后,从数据库中检索数据将更容易。我将继续努力!我会尽快回来。
答案 1 :(得分:1)
每年(一到多个)月,月(一到多天),每天包含(一对多) )收入/金额,简单的方法是使用orm。每个收入和金额都可以为此创建时间使用原则扩展。也别忘了以正确的方式联系他们。或者世界上最简单的事情就是使用日期时间表和收入表,并使用doctrine查询构建器来获取数天或数年的数据...
答案 2 :(得分:1)
使用后一种模式,它是迄今为止最好的模式。
要将其转换为与第一个类似的东西,作为PHP中的数组数组,您可以使用以下内容:
// Assume this function selects the rows you want according to last schema
$data = magically_fetch_all_data_from_database(
"SELECT
id,
DAYOFMONTH(date) as day,
MONTH(date) as month,
YEAR(date) as year,
amount,
income
FROM
mytable"
);
// Assume $data is an array of result rows
$end_data = array();
foreach($data as $row) {
// Populate the month data for all days in the month once for each month
if(!isset($end_data[$row['year']][$row['month']]) {
// This will generate elements 1...[endofmonth] with 0 values
$end_data[$row['year']][$row['month']] =
array_fill(
1,
cal_days_in_month(CAL_GREGORIAN, $row['month'],$row['year']),
array('amount'=>0, 'income'=>0)
);
}
$end_data[$row['year']][$row['month']][$row['day']] = array(
'amount' => $row['amount'],
'income' => $row['income']
);
}
/* Resulting array:
* array(
* [2015] => array(
* [1] => array(
* [1] => array('amount'=>0, 'income'=>0),
* [2] => array('amount'=>0, 'income'=>0),
* ...
* [31] => array('amount'=>0, 'income'=>0)
* [2] => array(
* ...
*/
当然,您必须根据自己的特定需求进行自定义。