2011-04-27 128 views
0

我創建近似於表這個SQL數據:與格式幫助需要返回

Fruit | Date Purchased | Amount Purchased 
---------------------------------------------- 
Apples | 01-01-10 | 5 
Oranges | 01-01-10 | 7 
Apples | 02-01-10 | 3 
Oranges | 02-01-10 | 2 
etc.... 

我需要在以下格式的數據,雖然落得:

Apples (
    (01-01-10, 5), 
    (02-01-10, 3) 
) 

Oranges (
    (01-01-10, 7), 
    (02-01-10, 2) 
) 
etc... 

的水果類型不固定 - 隨着時間的推移會增加更多,因此需要考慮這些因素。

我已經堅持了很長一段時間,所以任何指針或提示將非常感激。

+0

你能提供一些細節嗎?你用什麼Db?我假設你需要你的'代碼'輸出是這樣的? (因爲sql不會產生這樣的結果) – 2011-04-27 22:09:59

+0

嗨M.R.它是一個MySQL數據庫。我猜我必須將數據推送到一個PHP多維數組來實現我所需要的格式,但我不確定我的表結構是否理想。 – Jez 2011-04-27 22:16:42

回答

0

你可以通過所有所有的記錄循環,每一行添加到相應的陣列:

喜歡的東西:

$fruits = array(); 

while ($row = get_new_database_row)  /* depends on mysql, mysqli, PDO */ 
{ 
    $fruits[$row['fruit']][] = array($row['date'], $row['amount']); 
} 

編輯:根據您笨的意見,您可能需要result_array()或您需要將$row['fruit']更改爲$row->fruit,$row['date']$row->date等。

+0

感謝您回覆jeroen。不幸的是,我收到了一個錯誤。當使用CodeIgnitor「foreach」循環遍歷結果時,出現錯誤「無法使用類型爲stdClass的對象作爲...中的數組」。當使用PHP「mysql_fetch_array」時,出現錯誤「mysql_fetch_array()期望參數1是資源,給定對象」。現在已經很晚了,所以我會盡力解決明天這個問題。不管怎麼說,還是要謝謝你。 – Jez 2011-04-27 22:58:43

+1

如果你使用CodeIgniter,你爲什麼不早點告訴我們? – ariefbayu 2011-04-27 23:28:01

+0

因爲問題是關於MySQL/PHP而不是CodeIgniter特有的。 – Jez 2011-04-28 07:18:53

0

我會做這兩個查詢:在這一點上

$sql = "SELECT * FROM tabledata"; 
$rs = mysql_query($sql); 
while(false !== ($r = mysql_fetch_assoc($rs2))) 
{ 
    $arr_fruit[ $r['fruit'] ][ $r['date_purchase'] ] = $r['amout']; 
} 

,你會最終有關聯數組,你可以進一步處理。

我離開那個練習。有問題時再回來。但是,一定要帶上一些代碼。

+0

我不認爲在循環中需要另一個查詢,您可以一次獲取所有行。另外,根據OP的要求(同一天多次購買),將日期用作數組密鑰可能不是一個好主意。 – jeroen 2011-04-27 22:26:58

+0

謝謝你,我明天再仔細看看。 – Jez 2011-04-27 23:00:33

+0

@ jeroen,你說得對,應該只有一個查詢。我會解決它。 – ariefbayu 2011-04-27 23:01:53

2

我要懶圖輸出正確的HTML標籤來做選項卡,但下面的代碼應該可以幫助你。

SELECT CONCAT(
    s.Fruit, ' (<br/>', '<tab/>', 
    GROUP_CONCAT(s.DatePlusAmount SEPARATOR ',<br/><tab>'), 
    '<br/>)<br/>') as FruitLine FROM 
    (
    SELECT Fruit, CONCAT(PDate, ',', IFNULL(sum(amount),0)) AS DatePlusAmount 
    FROM table1 
    GROUP BY DATE 
) s 
    GROUP BY Fruit 

在PHP中無需循環。

+0

感謝您回覆約翰,明天我會試試這個。 – Jez 2011-04-27 22:59:40