A
A
Alexey2016-12-24 18:17:54
PHP
Alexey, 2016-12-24 18:17:54

PHP calendar output with COUNT(*) selection from MySQL database. How?

Good evening everyone.
During the implementation of the project, I encountered the following:
There is a table in which data is written, when recording, the date when this entry was made is indicated.
But you need to display a calendar of the current month indicating (next to each day of the month) the number of entries that were made on these days.
I can't implement it at all. I found the calendar on the Internet, but they do not have the necessary functionality (displaying the number of entries) and I can’t rewrite them in any way :(
UPD 1:

<?php
//Индивидуальные настройки скрипта
$ac_font_size = "10";           //Размер шрифта (только число)
$ac_font_color = "black";       //Цвет шрифта (в любом представлении: название, RGB, etc. [html-формат])
$ac_main_color = "white";       //Основной цвет календаря (Обычные дни) (аналогично цвету шрифта)
$ac_second_color = "silver";    //Второстепенный цвет календаря (аналогично цвету шрифта)
// (Текущий день, заголовок календаря)
$ac_navigator = false;           //Вывод строки навигации по месяцам (true/false)
//Массив названий месяцев
$mon_name = array
(
    "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
    "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"
);
//Массив продолжительностей месяцев
$nod = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
//Определение месяца и года для календаря
if (!isset($month)) {
    $ac_month = date("n");
    $ac_year = date("Y");
    $ac_j_dom = date("j");
    $ac_j_dow = date("w");
} else {
    list ($ac_month, $ac_year) = explode("-", $month);
    if ($ac_year < 1980) $ac_year = 1980;
    if ($ac_year > 2030) $ac_year = 2030;
    if ($ac_month != date("n") or $ac_year != date("Y")) {
        $ac_j_dom = 1;
        $ac_j_dow = date("w", mktime(0, 0, 0, $ac_month, 1, $ac_year));
    } else {
        $ac_j_dom = date("j");
        $ac_j_dow = date("w");
    }
}
//Корректировка продолжительности февраля в високосном году
if ($ac_year % 4 == 0) {
    $nod[1] = 29;
}
//Определение предыдущих/следующих месяцев/годов
$temp_month = $ac_month + 1;
if ($temp_month != 13) {
    $ac_month_next = "$temp_month-$ac_year";
} else {
    $temp_year = $ac_year + 1;
    $ac_month_next = "1-$temp_year";
}
$temp_month = $ac_month - 1;
if ($temp_month != 0) {
    $ac_month_prev = "$temp_month-$ac_year";
} else {
    $temp_year = $ac_year - 1;
    $ac_month_prev = "12-$temp_year";
}
$temp_year = $ac_year + 1;
$ac_year_next = "$ac_month-$temp_year";
$temp_year = $ac_year - 1;
$ac_year_prev = "$ac_month-$temp_year";
//Определение названия месяца
$ac_mon = $mon_name[$ac_month - 1];
//Корректировка номера дня недели из западно-европейской в русскую
if ($ac_j_dow == 0) $ac_j_dow = 7;
//Определение дня недели первого дня месяца
$ac_1_dow = $ac_j_dow - ($ac_j_dom % 7 - 1);
if ($ac_1_dow < 1) $ac_1_dow += 7;
if ($ac_1_dow > 7) $ac_1_dow -= 7;
//Определение числа дней месяца
$ac_nod = $nod[$ac_month - 1];
//Определение количества недель в месяце
$ac_now = 5;
if ($ac_1_dow - 1 + $ac_nod < 29) {
    $ac_now = 4;
} else if ($ac_1_dow - 1 + $ac_nod > 35) {
    $ac_now = 6;
}
//Предотвращение вывода текущего дня для нетекущего месяца
if ($ac_month != date("n") or $ac_year != date("Y")) $ac_j_dom = -10;
//Вывод шапки календаря
echo "
<table class='table table-bordered'>
<tr bgcolor=$ac_second_color>
    <td colspan=7 align=center>
        $ac_mon $ac_year
    </td>
</tr>
<tr bgcolor=$ac_second_color>
    <td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td><td>Вс</td>
    ";

//Вывод содержимого календаря
for ($i = 0; $i < $ac_now * 7; $i++) {
    if ($i % 7 == 0) {
        echo "</tr>\n<tr align=center bgcolor=$ac_main_color>\n\t";
    }
    if ($i - $ac_1_dow + 2 != $ac_j_dom) {
        echo "<td>";
    } else echo "<td bgcolor=$ac_second_color>";
    if (($i < $ac_1_dow - 1) || ($i > $ac_nod + $ac_1_dow - 2)) {
        echo "&nbsp;";
    } else {

        $zzz = $i - $ac_1_dow + 2;
        echo "$zzz";
    }
    echo "</td>\n\t";
}
//Строка навигации по месяцам
if (!$ac_navigator)
    echo "
</tr>
</table>";

Answer the question

In order to leave comments, you need to log in

1 answer(s)
E
Eugene, 2016-12-24
@Nc_Soft

select count(id), created_at, DATE_FORMAT(created_at, '%Y-%m-%d') as fmt from tbl group by fmt

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question