2011-07-16 91 views
0

我有一个数组:分组按日期的PHP/MySQL

Array 
(
    [0] => Array 
     (
      [id] => 53 
      [product] => something 
      [price] => £78 
      [quantity] => 23 
      [time] => 2011-07-15 20:29:21 
     ) 

    [1] => Array 
     (
      [id] => 52 
      [product] => product 
      [price] => £89 
      [quantity] => 1 
      [time] => 2011-07-14 00:51:57 
     ) 

    [2] => Array 
     (
      [id] => 51 
      [product] => product 
      [price] => £89 
      [quantity] => 1 
      [time] => 2011-07-14 00:51:37 
     )) 

我得到这个使用下面的SQL语句:

select * from some_table GROUP BY time DESC 

我想显示按日期排序结果,与日期作为标题:

eg

**2011-07-15** 
all array elements for above date go here 

**2011-07-15** 
all array elements for above date go here 

我想过为每个单独的一天做一个单独的声明,但这听起来不对。有没有更好的办法?

回答

2

ORDER BY时间查询,如:

select * from some_table ORDER BY time DESC 

然后循环在PHP中:

$last_date = 0; 
while($row = mysql_fetch_assoc($result)){ 
    $date = date('Y-m-d', strtotime($row['time'])); 
    if($date != $last_date) 
     echo '**'.$date.'**'; 
    $last_date = $date; 
    echo '<br />'; 
    echo 'Id: '.$row['Id']; 
    echo 'Product: '.$row['product']; 
    echo 'Price: '.$row['price']; 
    echo 'Quantity: '.$row['quantity']; 
    echo '<br /><br />'; 
} 

如果你ouputting到控制台,而不是一个HTML页面,然后更换'<br \>'"\n"

+0

GROUP BY和ORDER BY是两个不同的东西。如果表中的多个元组具有相同的时间,并且您正在选择汇总数据(如SUM(数量)或其他东西),则GROUP BY将只有一个影响 – Paulpro

+0

另外,将最后一个日期('Ym-d')存储在var中,仅在日期更改时才显示日期标题。 – bfavaretto

+0

哦,没有注意到他想让每个日期只输出一次。我会更新我的帖子。谢谢 – Paulpro

0
<? 
$arrDate = Array 
(
    [0] => Array 
     (
      [id] => 53 
      [product] => something 
      [price] => £78 
      [quantity] => 23 
      [time] => 2011-07-15 20:29:21 
     ); 


$currentDate = null; 

foreach ($arrDate as $item) { 

     if ($item["time"] == $currentDate) { 
      // print details 
     } 
     else { 
      $currentDate = $arrDate["time"]; 
      // print date header. 
      // print details 
     } 

} 

?>