格式化返回的SQL数据需要帮助

时间:2011-04-27 22:03:32

标签: php mysql sql database

我创建了一个近似于此的表格:

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

水果的类型不固定 - 随着时间的推移会增加更多,因此需要考虑这一点。

我已经坚持了很长一段时间了,所以任何指针或提示都会非常感激。

3 个答案:

答案 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}}等等。