MySQL-запрос для отображения родительского дочернего элемента в таблице с GROUP_CONCAT - PullRequest
0 голосов
/ 28 апреля 2018

Мы создаем приложение, и клиент должен показывать дочерний элемент под каждым родителем с разделителем.

Например: у меня есть 2 таблицы, как показано ниже

category:             category_description:

id(PK) | parent_id    id(fk) | name
-------|----------    -------|--------
    1  |    0             1  | Fruits
    2  |    1             2  | Apple
    3  |    1             3  | Orange
    4  |    0             4  | Veggies
    5  |    4             5  | Tomatoes
    6  |    4             6  | Cucumber

and so on ...

Результат должен отображаться в таблице как показано ниже

ID | Name
---|-----
 1 | Fruits
 2 | Fruits > Apple
 3 | Fruits > Orange
 4 | Veggies
 5 | Veggies > Tomatoes
 6 | Veggies > Cucumber

and so on...

Даже если клиент вставляет случайно, результат должен отображаться как указано выше.

Я попытался выполнить следующий запрос

SELECT c.category_id AS category_id, c.parent_id, c.sort_order, 
GROUP_CONCAT(cd.name SEPARATOR '  >  ') AS name FROM
category c LEFT JOIN category_description cd ON c.category_id = 
cd.category_id LEFT JOIN category_description cd1 ON cd1.category_id =
c.parent_id GROUP BY c.category_id, cd.name

Но не показывает результат, как ожидалось. Пожалуйста, дайте мне знать, где я иду не так.

Надеюсь, я мог бы объяснить это лучше. Заранее спасибо

1 Ответ

0 голосов
/ 28 апреля 2018

Я не знаю, почему вы здесь агрегируете; запрос соединения должен работать, предполагая, что существует только иерархия одного уровня:

SELECT
    c.ID,
    CONCAT(CASE WHEN c.parent_id = 0 THEN cd1.name ELSE cd2.name END,
        CASE WHEN c.parent_id <> 0 THEN CONCAT(' > ', cd1.name) ELSE '' END) AS Name
FROM category c
LEFT JOIN category_description cd1
    ON c.id = cd1.id
LEFT JOIN category_description cd2
    ON c.parent_id = cd2.id
ORDER BY
    CASE WHEN c.parent_id = 0 THEN c.id ELSE c.parent_id END,
    c.parent_id;

    ID  Name
1   1   Fruits
2   2   Fruits > Apple
3   3   Fruits > Orange
4   4   Veggies
5   5   Veggies > Tomatoes
6   6   Veggies > Cucumber

Демо

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