2015-10-14 94 views
1

我一直在研究我的齿轮。有关同一主题,请参阅my previous question。看起来这是一个难以解决的问题。但是,我发现​​,而且似乎Derek Adair已经设法使同一个问题出现json。安排在php和mysql下的月份

我的问题是

如何从该查询

SELECT 
    MONTHNAME(date) as month, YEAR(date) as year 
FROM 
    MOCK_DATA 
GROUP BY YEAR(date), MONTH(date) DESC 

得到的结果无论是JSON阵列,或obecjt(stdClass的)

{ 
    "2009":["August","July","September"], 
    "2010":["January", "February", "October"] 
} 

因为现在我得到以下结果:

Array(35) { [0]=> object(stdClass)#19 (2) { 
["month"]=> string(8) "December" 
["year"]=> string(4) "2013" } 
[1]=> object(stdClass)#20 (2) { 
["month"]=> string(8) "November" 
["year"]=> string(4) "2013" } . . . . 

和预期的结果是一样的东西:

2013 
jan 
feb 
...etc 
2014 
jan 
feb 
..etc 
2015 
jan 
feb 
..etc 
+0

从查询中获取数据后,使用一个for循环并做到这一点。 –

回答

0

请参阅下面的代码

$result = mysql_query("SELECT MONTHNAME(DATE) AS 
MONTH , YEAR(DATE) AS YEAR 
FROM mdata 
GROUP BY YEAR(DATE) , MONTH(DATE) DESC "); 
$data = array(); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
    $m = $row[0]; 
    $y = $row[1]; 
    if(!isset($data[$y])) { 
     $data[$y] = array(); 
    } 
    $data[$y][] = $m; 
} 
echo '<pre>'.print_r($data, true).'</pre>'; 

,其结果是

Array 
(
    [1997] => Array 
     (
      [0] => February 
     ) 

    [2004] => Array 
     (
      [0] => October 
     ) 

    [2015] => Array 
     (
      [0] => October 
      [1] => March 
     ) 

) 
0

这就是我想出了感谢接受的答案!

 $sql = "SELECT MONTHNAME(date) as month, YEAR(date) as year FROM MOCK_DATA GROUP BY YEAR(date), MONTH(date) DESC"; 
     $query = $database->prepare($sql); 
     $query->execute(); 

     $data = array(); 

while($row = $query->fetch(PDO::FETCH_ASSOC)) { 
    $m = $row['month']; 
    $y = $row['year']; 
    if(!isset($data[$y])) { 
     $data[$y] = array(); 
    } 
    $data[$y][] = $m; 
} 

     return $data; 

这也是我如何打印:

echo '<br>Years and months<br>'; 
foreach($this->arrange as $year => $yearMonths) { 
    echo '<b>Year: '.$year.'</b><br>'; 
    foreach($yearMonths as $month) { 
     echo 'Month: '.$month.'<br>'; 
    } 
    echo '<br>'; 
} 
echo '<br>Only years<br>'; 
foreach($this->arrange as $year => $yearMonths) { 
    echo '<b>Year: '.$year.'</b><br>'; 
}