mysql группировка по категории

141
06 марта 2021, 03:30

есть таблица категории

id | title | published

и таблица подарков

id | title | category_id | published

как вывести подарки группируя по категориям во так

категория
 --подарок
 --подарок
категория 2

пробовал так , но выводит по одному

SELECT * FROM `presents` p
left join `category_presents` cp on p.category_present_id = cp.id
where cp.`published` = 1 and p.`published`=1 group by cp.title
Answer 1

Group by в SQL это не такая группировка. Результаты выборки это множество строк, а не дерево. Выбирайте без group by, а дерево формируйте на PHP.

Пример кода

select
    `presents`.*,
    `category_presents`.`title` as `category_title`
from `presents`
join `category_presents` on
    `category_presents`.`id` = `presents`.`category_id`
where
    `presents`.`published` = 1
    and `category_presents`.`published` = 1

Получите строки:

id | title | category_id | published | category_title

Теперь в дело идёт php или js (что удобнее для вашей задачи)

$presentsByCategory = [];
foreach ($rows as $row) {
    if ( ! isset($presentsByCategory[$row['category_id']])) {
        $presentsByCategory[$row['category_id']] = (object) [
            'id' => $row['category_id'],
            'title' => $row['category_title'],
            'presents' => [],
        ];
    }
    $presentsByCategory[$row['category_id']]->presents[] = $row;
}
READ ALSO
Yii2 проблема с отображением страницы

Yii2 проблема с отображением страницы

Помогите решить вопрос с отображением страницы, не могу понять в чем проблемаИногда страница отображается в таком формате

129
Как заменить /lang=ru на /ru в адресной строке?

Как заменить /lang=ru на /ru в адресной строке?

У меня есть сайт http://wwwexample

117
Как запустить jar на javafx в консоли?

Как запустить jar на javafx в консоли?

Я написал программу на javafxКак мне открыть в консоли jar?

113
Ошибка java.io.IOException: CreateProcess error=2

Ошибка java.io.IOException: CreateProcess error=2

при нажатии на test connection javaio

88