Двойная группировка с PHP PDO - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь извлечь запись из базы данных mySQL и сгруппировать их.Давайте возьмем эту таблицу в качестве примера:

+++++++++++++++++++++++++++++++++++++++++++++++++++++
DATEADDED            DOCTYPE     SUBJECT    DETAILS
2018-03-03 9:54:54   DOCUMENT     Letter     Outgoing
2018-03-03 8:54:54   PARCEL       Mail       Incoming
2018-03-04 8:55:54   PARCEL       Mail       Incoming
2018-03-04 8:55:54   DOCUMENT     Mail       Outgoing
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Что я хотел сделать, это сгруппировать эти данные по дате (без времени), а затем сгруппировать по ТИПУ и СЧИТАЙТЕ их так, чтобы это выглядело так:

+++++++++++++++++++
DATE: April 3, 2018
      DOCUMENT - 1
      PARCEL -   1
 TOTAL-----------2

DATE: April 4, 2018
      DOCUMENT - 1
      PARCEL -   1
 TOTAL-----------2                     
++++++++++++++++++++

Попытался использовать следующий код:

<?php 
foreach($page->query('SELECT id,dateAdded,COUNT(*) FROM seclogs GROUP BY DATE(dateAdded) desc') as $row) { ?><tr>
<td><?php echo date("Y-m-d", strtotime($row['dateAdded'])); ?></td>
<td><?php 

$thisDate=date(strtotime($row['dateAdded']));
foreach($page->query("SELECT id,dateAdded,docType,COUNT(*) FROM seclogs WHERE DATE(dateAdded) LIKE '$thisDate' GROUP BY docType desc") as $row2) {

echo $row2['docType']."-".$row2['COUNT(*)']."<br/>"; } ?><br/><b><?php echo "Total: ".$row['COUNT(*)'].""; ?></b> </td> 
</tr><?php } ?>

, но он показывает только следующий вывод:

+++++++++++++++++++
DATE: April 3, 2018


 TOTAL-----------2

DATE: April 4, 2018


 TOTAL-----------2                     
++++++++++++++++++++

Я работал и искал эту проблему везде, ноне могу найти ответ.Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 23 мая 2018

Точный вывод, который вы хотите, на самом деле представляет собой презентацию и может быть довольно легко обработан в вашем PHP-коде.Что касается запроса, я бы использовал следующие необработанные данные для необработанных данных:

SELECT
    DATE(dateAdded) AS dateAdded,
    docType,
    COUNT(*) AS cnt
FROM seclogs
GROUP BY
    DATE(dateAdded),
    docType
ORDER BY
    DATE(dateAdded),
    docType;

Конечно, это не даст желаемого результата, по крайней мере, не совсем.Теперь вам нужно использовать цикл, который печатает только дату в начале каждой группы даты / типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...