如何在MySQL中每天存储数据?

时间:2015-05-10 22:08:10

标签: php mysql database symfony

我有一个问题,我怎样才能创建一个存储数据的表格,并显示如下:

+-------+--+--+--+--+--+--+--+--+--+--+--+
|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中进行编程

3 个答案:

答案 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(
 *       ...
 */

当然,您必须根据自己的特定需求进行自定义。