Intereting Posts
Как найти, какие письма находятся в одних и тех же списках? baseUrl видит помощника, не работающего над ZendFramework 2 Функция PHP: найти имя переменной аргумента и номер строки вызова функции zend framework 2 Dynamic Breadcrumbs – Параметры прохождения Есть ли какой-либо возможный способ, которым посетитель может получить доступ к тому, что отправлено POST? php аутентификации пользователей / фреймворков … какие варианты? Тестирование функциональности с помощью тестовой базы данных / данных для PHPUnit DOMXML, PHP4 => PHP5 система уведомлений в PHP / jQuery Ошибка анализа: синтаксическая ошибка, непредвиденная строка T_FUNCTION 10? php-файл с командами CURL, не работающими на сервере Отображение цены только при выборе варианта и скидки в процентах относительно обычной цены php, mysql – Слишком много соединений с ошибкой базы данных mod_fcgid время ожидания чтения из канала, конец вывода сценария перед заголовками, несколько версий PHP Как сохранить значение выбранного пользователем параметра из выпадающего списка выбора в базу данных mysql?

даты данных в верхней части и ячейки данных, идущие слева направо

Я работаю над системой, которая обслуживает небольшие группы зарегистрированных членов на основе их местоположений (ячеек). Текущая проблема, с которой я столкнулась, отображает список услуг по количеству присутствующих в определенную дату. Запрос верный, но у меня проблемы с форматированием таблицы правильно

данные должны отображаться так

СЕРВИС | DATE1 | DATE2 | и т.д


ЗДОРОВЬЕ | 5 | 3 | и т.д


DENTIST | 10 | 20 | и т.д

Это в настоящее время то, что я сделал:

<div class="col-sm-12"> <div class="box-body no-padding"> <table class="table cell-border" id="members"> <thead> <th>Service</th> <?php foreach($result as $g){?> <th><?php echo $g['date'];?></th> <?php }?> </thead> <tbody> <tr> <td><?php echo $g['Service Name'];?></td> <?php $i=1; foreach($result as $g){ ?> <td> <?php if($g['Attendance'] == 'NULL') {echo 0;} else { echo $g['Attendance'];}?> </td> <?php }?> </tr> </tbody> </table> </div> 

Вот запрос:

 SELECT record_attendance_cell.id, record_attendance_cell.`company_id`,record_attendance_cell.`cell_id`,record_attendance_cell.`member_id`, COUNT(record_attendance_cell.`present`) as `Attendance`, record_attendance_cell.`service_id`,record_attendance_cell.`date`, setting_company.name `Company Name`, setting_cell_group.`location`, `setting_service`.title as `Service Name` FROM `record_attendance_cell` LEFT JOIN setting_company on setting_company.id = record_attendance_cell.company_id LEFT JOIN setting_cell_group on setting_cell_group.id = record_attendance_cell.cell_id LEFT JOIN setting_service on setting_service.id = record_attendance_cell.service_id WHERE record_attendance_cell.`present` = 1 AND record_attendance_cell.`date` BETWEEN '$date_from' AND '$date_to' group by record_attendance_cell.service_id order by record_attendance_cell.date asc 

Согласно вашему результату и вашему описанию. Я придумал это:

Попробуйте (EDITED):

 <style> table th, table td { border: 1px solid #333; } </style> <?php $result[] = array('Service Name' => 'Health', 'date' => '2017-04-04', 'Attendance' => 5); $result[] = array('Service Name' => 'Payroll', 'date' => '2017-04-16', 'Attendance' => 5); $result[] = array('Service Name' => 'Saturday Youth Meeting', 'date' => '2017-04-03', 'Attendance' => 1); $result[] = array('Service Name' => 'Saturday Youth Meeting', 'date' => '2017-05-03', 'Attendance' => 3); $result[] = array('Service Name' => 'Payroll', 'date' => '2017-05-03', 'Attendance' => 2); $result[] = array('Service Name' => 'Payroll', 'date' => '2017-04-11', 'Attendance' => 3); foreach ($result as $row) { $array[$row['Service Name']][$row['date']] = $row; } $start_date = '2017-04-03'; $end_date = '2017-05-03'; echo '<table><thead><tr><th>Service</th>'; $date = $start_date; WHILE (strtotime($date) <= strtotime($end_date)) { echo '<th>' . $date . '</th>'; $date = date('Ym-d', strtotime($date . ' +1day')); } echo '</tr></thead>'; echo '<tbody>'; foreach ($array as $key => $value) { $date = $start_date; echo '<tr><td>'.$key.'</td>'; WHILE (strtotime($date) <= strtotime($end_date)) { if (array_key_exists($date, $array[$key])) { echo '<td>' . $array[$key][$date]['Attendance'] . '</td>'; } else { echo '<td>0</td>'; } $date = date('Ym-d', strtotime($date . ' +1day')); } echo '</tr>'; } echo '</tbody></table>'; 

ВЫВОД:

http://www.phpwin.org/s/ewbAS6

Если вы хотите, чтобы посещаемость была аккумулирующей, просто измените цикл WHILE (ADDED)

 foreach ($result as $row) { $array[$row['Service Name']][$row['date']] = $row; } $start_date = '2017-04-03'; $end_date = '2017-05-03'; echo '<table><thead><tr><th>Service</th>'; $date = $start_date; WHILE (strtotime($date) <= strtotime($end_date)) { echo '<th>' . $date . '</th>'; $date = date('Ym-d', strtotime($date . ' +1day')); } echo '</tr></thead>'; echo '<tbody>'; foreach ($array as $key => $value) { $date = $start_date; echo '<tr><td>'.$key.'</td>'; $attendance = 0; WHILE (strtotime($date) <= strtotime($end_date)) { if (array_key_exists($date, $array[$key])) { $attendance = $attendance + $array[$key][$date]['Attendance']; } echo '<td>' . $attendance .'</td>'; $date = date('Ym-d', strtotime($date . ' +1day')); } echo '</tr>'; } echo '</tbody></table>'; 

ВЫВОД

http://www.phpwin.org/s/5umFBA