2011-04-27 89 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