2009-05-11 9 views
0

これを行う方法がわかりません。クエリはすばやく実行する必要はありません...それはスフィンクスインデックス用ですが、検索のためにすべてのデータを含める必要があります。ここでsphinxのmysqlクエリ

は、テーブルの構造です:

person 
- main_id 
- name 

person_attritubes 
- attribute_id 
- name (example: hair, eyes, height) 

person_details 
- main_id 
- attribute_id 
- value (example: blond, brown, blue, green, 5'6", 6'5") 

は、どのように私は1つのクエリでこれらの列の行としてすべての列としてperson_attritubes.nameとperson_details.valueを得るのですか?

答えて

0

他の解決策が見つかりました。

isクエリはスフィンクスインデックスのため、詳細をテキスト検索用に1つの列に連結することができます。

SELECT 
person.main_id AS id, name, 
GROUP_CONCAT(person_details.value SEPARATOR ' ') AS content 
FROM person 
INNER JOIN person_details ON (person.main_id = person_details.main_id) 
GROUP BY person_details.main_id 
0

person_detailsテーブルに複数回参加します。あなたは属性IDを知る必要があります。

SELECT ...,pd1.value AS hair, pd2.value AS eyes FROM person p, person_details pd1, person_details pd2 WHERE p.main_id=pd1.main_id AND pd1.attribute_id=[id for hair] AND p.main_id=pd2.main_id AND pd2.attribute_id=[id for eyes] ...etc... 
+0

私は新しい属性を追加するたびに、いつでも新しいクエリを書き直す必要があります。ご協力いただきありがとうございます。 – timborden

+0

James、これを解決する方法がわからないperson_detailsが利用できない場合は、空の結果セットが返されます(例:人にはヘア値はありません)。何か案は? – timborden