Получить список месяцев, год в mysql
Я пытаюсь сделать следующее php
mysql
:
То, что в скобках-это количество результатов, в течение каждого месяца. Для этого, я сохранить его в моей базе данных, в таблице tbl_noticias
: поле data
типа yyyy-mm-dd
. Я сохранить еще поля id
среди других(не нужно, чтобы здесь). Мне не удается понять, как я могу достичь этого конечного результата с использованием mysql
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>";
}
}
?>
Спасибо!
Пытается использовать логику или даже код
$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);
@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 раза.