Запрос лучше сделать вот таким:
Код
$query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`stat_date`) AS `stat_date_month`, CEIL(day(stat_date)/7) AS `stat_date_week`, YEAR(`stat_date`) AS `stat_date_year`
FROM `action_user`
GROUP BY `friend_name`, MONTH(stat_date), CEIL(day(stat_date)/7), YEAR(stat_date)";
$q=mysql_query($query);
Код нужно поправить вот так:
Код
while($row = mysql_fetch_assoc($q))
{
// Переменная должна получится такой "2015_1_2" - это вторая неделя января в 2015 году
$data_format = $row['stat_date_year'] . "_";
$data_format .= $row['stat_date_month'] . "_";
$data_format .= $row['stat_date_week'];
// Переменная содержит дату в чираемом формате, к примеру
// "2 неделя января 2015"
$data_human = $row['stat_date_week'] . " неделя ";
$data_human .= $months[$row['stat_date_month']] . " ";
$data_human .= $row['stat_date_year'];
// Масив уникальных дан
$a_data[$data_format] = $data_human;
// Масив уникальных пользователей
$a_user[$row['friend_name']] = $row['friend_name'];
// Масив количества полещений пользователем в определенную дату
$a_count[$data_format][$row['friend_name']] = $row['count'];
}
// Сортируем массив дат по возрастанию
ksort($a_data);
// Смотрим, что за масивы у нас получились
// Эта часть нужна только на этапе отладки
print_r($a_data);
print_r($a_user);
print_r($a_count);
// table begin
echo '<table class="bordered">
<tr>
<th style="text-align: center;"><strong>Пользователь</strong></th>
';
foreach( $a_data as $human )
echo '<th style="text-align: center;"><strong>' . $human . '</strong></th>';
echo '</tr>';
// Проходимся по всем пользователям, это строки таблицы
foreach($a_user as $user_key => $user_value)
{
echo '<tr>
<td><h6>' . $user_value . '</h6></td>';
// Для каждого пользователя проходимся по всем датам
foreach($a_data as $data_format => $data_human )
{
// Если были посещения, выводим значение
if( isset($a_count[$data_format][$user_value]) )
echo '<td><h6>' . $a_count[$data_format][$user_value] . '</h6></td>';
// В ином случае выводим "0"
else
echo '<td><h6>0</h6></td>';
}
echo '</tr>';
}
echo '</table>';
// table end
Отредактировал: ktod, - 9.3.2015, 12:47