2015-05-10 41 views
1

我有一個問題,我怎麼可以創建一個存儲數據,並顯示他們像這樣的表:如何在MySQL中每天存儲數據?

+-------+--+--+--+--+--+--+--+--+--+--+--+ 
|January|01|02|03|04|05|06|07|08|09|..|31| 
| Amount| | 2| | | 1| 5| 7| | |..| 7| 
| Income| |30| | |10|98|75| | |..|89| 
+-------+--+--+--+--+--+--+--+--+--+--+--+ 

等......爲每月和每年。

當然量和收入有一定的轉儲數據,只有我的意思顯現。

我認爲表一樣,在DB創建(一種量,我的收入):

+--+-------+----+---+---+---+---+----+---+---+---+ 
|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

+2

最後一個是MySQL的最佳模式。不使用日期型數據 –

+1

和存儲日期混合數據庫存儲的邏輯! – Strawberry

+0

@Dagon感謝您與顯示邏輯 – ptyskju

回答

1

是編程您可以創建一個關係型數據庫,連接金額,日期和收入。或者,您可以創建一個類似於示例中的第三個表格,但將日期分爲日,月和年,而不是將所有日期放在一起。這只是一個想法!那麼從數據庫中檢索數據會更容易。我會努力的!我會盡快回來。

+2

分隔日期是一個壞主意 –

+1

保持它作爲一個日期,你可以使用mysql日期函數。如果需要的話,稍後將其分開。 – Phil

+0

@Dagon是啊!我意識到!謝謝! –

1

製作年份(一對多)月,月(一對多)天,每天包含(一對多 )收入/金額,簡單的方法是使用orm。每個收入和金額都可以創造時間使用原則擴展。另外不要忘記把他們正確的方式。或者在世界上最容易的事情做出公正的收入和金額與日期時間和使用原則查詢生成器的表按天或數年才能獲取數據...

+0

我已經在3'rd表中做了:)但謝謝你的建議。 – ptyskju

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

當然,你必須自定義爲您的特定需要。

+0

謝謝你的回答!這非常鼓舞人心!我通過創建完整的空數組,然後將數據庫中的數據放入其中來創建它。 – ptyskju

+0

@ptyskju如果您發現答案是最合適的,請將其作爲選定的答案。謝謝! – hexblot

相關問題