0

2 つのカスケード多対多リレーションシップを結合するにはどうすればよいですか?

私は5つのテーブルを持っています:

ITEMS            : id /     name

ITEMS_TAXONOMIES : id /    item_id    / taxonomy_id

TAXONOMIES       : id /  attribute_id / adjective_id

ATTRIBUTES       : id /     name

ADJECTIVES       : id /     name

特定のアイテムに関連付けられているすべての属性と形容詞のペアを取得するには、単一の SELECT が必要です。

私は Sphinx 検索エンジンを使用しており、アイテムに関連付けられた WORDS を探す必要があります。

ヒントをありがとう...

4

1 に答える 1

1

(スフィンクスフォーラムですでに作成された私の回答のコピー)

私が考える最も簡単な解決策は

sql_query = SELECT i.id, i.name , \
                    GROUP_CONCAT(CONCAT(at.name,' ',ad.name)) as taxonomies \
                    FROM items i \
                          LEFT JOIN items_taxonomies it ON (i.id = it.item_id) \
                          LEFT JOIN taxonomies t ON (t.id = it.taxonomy_id) \
                          LEFT JOIN attributes at ON (at.id = t.attribute_id) \
                          LEFT JOIN adjectives ad ON (ad.id = t.adjective_id) \
                    GROUP BY i.id \
                    ORDER BY NULL

sql_attr_multi を使用する必要のない単語を検索するだけです。sql_joined_field を使用してインデックスを作成すると、パフォーマンスがわずかに向上する可能性がありますが、上記の方が簡単なので、最初に試してみてください。または、属性と形容詞を別々のフィールドに入れることもできます。ただし、上記には、「属性バー」を検索して特定の分類法を取得できるという利点があります。

結果のドキュメントに関連するタクソノミーのリストをグループ化または取得したい場合は、taxonomy_id を MVA に貼り付けることができます。

于 2012-09-26T17:14:03.753 に答える