Получить список месяцев, год в mysql


Я пытаюсь сделать следующее php mysql:

inserir a descrição da imagem aqui

То, что в скобках-это количество результатов, в течение каждого месяца. Для этого, я сохранить его в моей базе данных, в таблице tbl_noticias: поле data типа yyyy-mm-dd. Я сохранить еще поля id среди других(не нужно, чтобы здесь). Мне не удается понять, как я могу достичь этого конечного результата с использованием mysql

Author: Leonardo, 2014-03-24

3 answers

Удалось туда добраться следующим образом:

<?php
                    $sql = mysql_query("SELECT DISTINCT YEAR(data) AS ano, id AS id FROM tbl_noticias GROUP BY ano");
                    while($row = mysql_fetch_array($sql))
                    {
                        $ano = $row['ano'];
                        echo "Ano: ".$ano."<br>";
                        $sql1 = mysql_query("SELECT DISTINCT MONTH(data) AS mes, id AS id FROM tbl_noticias WHERE YEAR(data) = '$ano' GROUP BY mes");
                        while($row1 = mysql_fetch_array($sql1))
                        {
                            $mes = $row1['mes'];
                            echo "Mes: ".$mes." - ";
                            $sql2 = mysql_query("SELECT count(*) AS contagem FROM tbl_noticias WHERE YEAR(data) = '$ano' AND MONTH(data) = '$mes'");
                            $row2 = mysql_fetch_array($sql2);
                            echo $row2['contagem']."<br>";
                        }
                    }
                  ?>

Спасибо!

 2
Author: pc_oc, 2014-03-24 12:38:03

Пытается использовать логику или даже код

$query=mysql_query("SELECT data, DATE_FORMAT(data,'%Y') as ano FROM tbl_noticias GROUP BY YEAR(data)");

$anos_meses="";
while ($row_anos = mysql_fetch_assoc($query)) 
{
    $ano = $row_anos["ano"];
    $anos_meses[]=$ano;

    $buscar_meses=mysql_query("SELECT data, DATE_FORMAT(data,'%M') as mes FROM tbl_noticias WHERE YEAR(data)='$ano' GROUP BY MONTH(data)");
    while ($row_meses = mysql_fetch_assoc($buscar_meses)) 
    {
        $mes=$row_meses['mes'];
        $anos_meses[$ano][]=$mes;
    }
}

print_r($anos_meses);
 1
Author: Silvio Andorinha, 2014-03-24 12:41:22

@pc_oc Если использовать запрос на каждой итерации, только знать общее (COUNT(*) AS count) будет иметь большую проблему с производительностью и потреблением памяти, особенно если таблица отличается от таблицы MyISAM.

Можете использовать COUNT(*) во второй запрос, без необходимости 3.запрос:

$sql = mysql_query("SELECT DISTINCT YEAR(data) AS ano, id AS id FROM tbl_noticias GROUP BY ano");
while($row = mysql_fetch_array($sql))
{
    echo "Ano: {$row['ano']}<br>";
    $sql1 = mysql_query("SELECT DISTINCT MONTH(data) AS mes, COUNT(*) AS contagem, id FROM tbl_noticias WHERE YEAR(data) = '$ano' GROUP BY mes");
    while ( ($row1 = mysql_fetch_array($sql1))) {
        echo "Mes: {$row1['mes']} - ({$row1['contagem']})<br>";
    }
}

И В вашем примере, PHP будет вызывать функцию COUNT(*) 15 раз, тогда, что в этом будет вызывать только 2 раза.

 1
Author: , 2014-03-24 20:07:21