我创建了一个近似于此的表格:
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 :(得分: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中的循环。
答案 1 :(得分: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'];
}
此时,您最终会拥有可以进一步处理的关联数组。
我把它留作练习。当你遇到问题时再回来。但是,一定要带些代码。
答案 2 :(得分:0)
您可以遍历所有记录并将每一行添加到相应的数组中:
类似的东西:
$fruits = array();
while ($row = get_new_database_row) /* depends on mysql, mysqli, PDO */
{
$fruits[$row['fruit']][] = array($row['date'], $row['amount']);
}
修改:根据您的codeigniter评论,您需要result_array()
或者需要将$row['fruit']
更改为$row->fruit
,$row['date']
更改为{ {1}}等等。