MySQL вложенный и Concat две колонки?

У меня есть следующие таблицы:

1) tbl_entries:

+----------+-------------+-------------------+
| entry_id | entry_title | entry_category_id |
+----------+-------------+-------------------+
| 10       | Entry 1     | 3                 |
| 20       | Entry 2     | 2                 |
| 30       | Entry 3     | 2                 |
| 40       | Entry 4     | 5                 |
+----------+-------------+-------------------+

2) tbl_categories

+-------------+---------------+
| category_id | category_name |
+-------------+---------------+
| 1           | Animal        |
| 2           | People        |
| 3           | Gadgets       |
| 4           | Entertainment |
| 5           | Business      |
+-------------+---------------+

2) tbl_categories_secondary

+-------------+---------------+
| cs_entry_id | cs_category_id|
+-------------+---------------+
| 10          | 5             |
| 20          | 1             |
| 20          | 3             |
| 20          | 5             |
| 40          | 1             |
| 40          | 4             |
+-------------+---------------+

Я хочу запросить все записи вместе с первичными и вторичными категориями (валфавитном порядке и через запятую), так что это приведет к:

+-------------+---------------------------------+
| title       | categories                      |
+-------------+---------------------------------+
| Entry 1     | Business,Gadgets                |
| Entry 2     | Animal,Business,Gadgets,People  |
| Entry 3     | People                          |
| Entry 4     | Animal,Business,Entertainment   |
+-------------+---------------------------------+

Это то, что я попробовал почти за день без удачи:

SELECT tbl_entries.entry_title AS title, addCats.more_categories AS categories
FROM tbl_entries,
(
    SELECT cs_entry_id, GROUP_CONCAT(category_name SEPARATOR ',') AS more_categories
    FROM tbl_categories
    INNER JOIN tbl_categories_secondary
        ON tbl_categories.category_id = tbl_categories_secondary.cs_category_id
    GROUP BY cs_entry_id
) addCats
INNER JOIN categories
    ON tbl_entries.entry_category_id = tbl_categories.category_id

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

Любая помощь будет оценена:)

1 ответ

Попробуйте что-то вроде ниже. создал псевдоним для tbl_categories как tc1 и присоединился

выберите tbl_entries.entry_title, CONCAT (GROUP_CONCAT (tbl_categories.category_name), GROUP_CONCAT (tc1.category_name)) внутреннее соединение tbl_categories на tbl_entries.entry_category_id=tbl_categories.category_id внутреннее соединение tbl_categories_secondary на tbl_categories_secondary.cs_entry_id =tbl_entries.entry_id внутреннее соединение tbl_categories, как tc1 на tc1.category_id =tbl_categories_secondary.cs_category_id group by tbl_entries.entry_title

Другие вопросы по тегам