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