Объединение запроса MySQL обе объединяющих таблицы и вложенные наборы

У меня есть три таблицы, categories, tags, и taggings. Таблица категорий соединена способом вложенного набора с соответствующими столбцами id, lft, rgt, и parent_id. Теги имеют id и name. Маркировки имеют tag_id и taggable_id, который относится к categories.id.

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

Категории

id | parent_id | lft | rgt
 1 |      NULL |   1 |   6
 2 |         1 |   2 |   5
 3 |         2 |   3 |   4

Теги

id | name
 1 | cool
 2 |  rad
 3 | soup

Маркировки

id | tag_id | taggable_id
 1 |      1 |           1
 2 |      2 |           2
 3 |      3 |           3

Я хотел бы за запрос SELECT ??? FROM categories возвратиться:

id |      tag_list
 1 |          cool
 2 |      rad cool
 3 | rad cool soup

Вводная информация: я выполняю направляющие, и я использую Думающего Сфинкса для поиска и awesome_nested_set для вложения. Мне назвали таблицу categories, который имеет многих tags в a has_many_through отношения.

1
задан Steven 2 August 2010 в 21:05
поделиться

1 ответ

SELECT node_id, group_concat(name SEPARATOR ' ')
FROM taggings INNER JOIN tags ON taggings.tag_id=tags.id
INNER JOIN (SELECT node.id AS node_id, parent.id AS parent_id
FROM categories AS node,
categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt) subcategories
ON subcategories.parent_id=taggings.taggable_id
GROUP BY (node_id);

Ну, я, например, кое-что узнал, делая это :)

РЕДАКТИРОВАТЬ: Я не проверял это на mysql, только на SQLite, поэтому синтаксис может быть не на 100%.

2
ответ дан 2 September 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: