1

、、、の3つのテーブルがcategoriesありtagsますtaggings。カテゴリテーブルは、関連する列id、、、、およびを使用して、ネストされたセットの形式でまとめられます。タグにはとがあります。タグ付けにはとがあり、これはを参照します。lftrgtparent_ididnametag_idtaggable_idcategories.id

可能であれば、フィールドに返される1つのクエリ、たとえば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

背景情報:私はRailsを実行しており、検索にはThinking Sphinxを使用し、ネストにはawesome_nested_setを使用しています。と呼ばれるテーブルがありcategories、多くtagshas_many_through関係があります。

4

1 に答える 1

2
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);

ええと、私は1つか3つそれをすることを学びました:)

編集:私はそれをmysqlに対してチェックせず、SQLiteのみに対してチェックしたので、構文は100%ではない可能性があります。

于 2010-08-03T01:54:29.983 に答える