【问题标题】:Arrange months under year php and mysqlphp 和 mysql 年份下的月份排列
【发布时间】:2015-10-14 08:32:46
【问题描述】:

我一直在努力研究这个。有关同一主题,请参阅 my previous question。似乎这是一个很难解决的问题。但是,我找到了this thread,似乎 Derek Adair 已经设法从同样的问题中制作了一个 json。

我的问题是

我如何从这个查询中得到

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

【问题讨论】:

  • 从查询中获取数据后,使用 forloop 执行此操作。

标签: php mysql json


【解决方案1】:

请看下面的代码

$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
        )

)

【讨论】:

    【解决方案2】:

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

            $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>';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2015-01-14
      • 2023-04-01
      相关资源
      最近更新 更多