#php #mysql
#php #mysql
Вопрос:
Мне нужно распечатать общий (подсчет) архив новостей по месяцам года (12 месяцев) в формате json следующим образом :
Вывод:
["January:31","February:28","March:0","April:130","May:450","June:0","July:0","August:0","September:0","October:520","November:20","December:31"]
Код PHP:
SELECT COUNT(*) AS id,
YEAR(date) as `year`,
MONTH(date) as `month`,
MONTHNAME(date) as `month_name`,
FROM `aticle`
GROUP BY `year`, `month`;
т.е. if we dont have news in any month print:0
ПРИМЕЧАНИЕ:: "March:0","July:0".....
Как я могу это распечатать ?!
Комментарии:
1. Можете ли вы опубликовать то, что у вас есть на данный момент?
2. StackOverflow следует использовать в качестве руководства , чтобы вы получили ответ, мы не будем писать код за вас. Что вы написали до сих пор в попытке решить эту проблему?
3.
SELECT COUNT(<column_containing_news_count>) AS num_of_articles, MONTHNAME(date) as month_name FROM aticle GROUP BY MONTHNAME(date);
?4. @esqew: это правда. Но я не имею ни малейшего представления об этом. моя проблема в этом!
5. @user27133 Вы могли бы начать с выполнения запроса и загрузки результатов в массив, не так ли?
Ответ №1:
Вы можете использовать IFNULL
для проверки, если данные не найдены, они должны быть 0
..
Пожалуйста, попробуйте выполнить запрос, приведенный ниже.
SELECT IFNULL(COUNT(*),0) AS id, YEAR(date) as `year`, MONTH(date) as `month`, MONTHNAME(date) as `month_name`,FROM `aticle`GROUP BY `year`, `month`;
Спасибо
Ответ №2:
Вы можете сделать это, сгенерировав строку для каждой комбинации месяца / года, которую вы хотите. Предполагая, что у вас есть хотя бы одно значение для каждого месяца и года, самый простой способ:
SELECT COUNT(*) AS id, y.yr, m.mon, m.mname
FROM (select distinct year(date) as yr from article) y cross join
(select distinct month(date) as mon, monthname(date) as mname from article) m left join
article a
on year(a.date) = y.yr and month(a.date) = m.mon
GROUP BY y.yr, m.mon;
В противном случае вам придется найти способ получить список всех месяцев, используя что-то вроде:
select 1 as mon, 'Jan' as mname union all
. . .
Комментарии:
1. Самый простой способ не работает. Вы проверяете это?
2. @user27133 . , , я много раз запускал подобные запросы. Как это не работает?
3. я добавляю этот код для вывода:
$value = array(); foreach($stats as $key => $value){ $rows2[] = $value['mname']; } echo json_encode($rows2);
вывод:[null,"February",null,"February"]
это просто для печати в течение всего месяца.4. Для печати я выбираю true way?