Как группировать внутри группы в php - PullRequest
1 голос
/ 01 июня 2019

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

january 2018
user 1  -> item 1
        -> item 5
        -> item 7

user 4  -> item 2
        -> item 1

user 7 -> item 6

и т. Д.

Я чувствую, что я рядом и, может быть, просто упускаю что-то простое, вот мой код

$sql = '
    SELECT 
        i.*, o.*, oi.*, u.*, YEAR(o.sold_date) sold_date_Y, MONTH(o.sold_date) sold_date_M, u.name, COUNT(o.user_id)

    FROM items i
    INNER JOIN order_items oi ON i.id = oi.item_id
    INNER JOIN orders o ON o.id = oi.order_id
    INNER JOIN users u ON u.id = o.user_id
    GROUP BY YEAR(o.sold_date), MONTH(o.sold_date), u.name, i.title
    ORDER BY YEAR(o.sold_date), MONTH(o.sold_date), u.name, i.title
';

$result = mysqli_query($con, $sql);

$savYM = '';
while($row = mysqli_fetch_array($result)){
    $curYM = $row['sold_date_Y'].'-'.$row['sold_date_M'];
    if($curYM != $savYM){
        echo '<br/>'. date('F, Y', strtotime($curYM)) .'<br/>'; 
    }


    echo $row['name'].'<br/>';
    echo $row['title'].'<br/>';
    $savYM = $curYM;
}

Это выводит 50% правильно, все сгруппировано по месяцам и годам, но после этого я получаю дублирующих пользователей, так что в итоге это выглядит так

january 2018
user 1  -> item 1
user 7  -> item 6
user 1  -> item 5
user 4  -> item 2
user 1  -> item 7
user 4  -> item 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...