mysqlビューを作成してSphinx検索で使用しようとしています。
レシピ、タグ、材料の3つのテーブルがあります。
*太字の単語は行名です
レシピは、レシピ名と調理時間(durationtotal)を保存する場所です。
材料は、特定のレシピに必要な1つの材料を保存する場所です(つまり、すべてのレシピに対応する複数の材料があります)。材料には、レシピに対応するrecipe_idと、材料の名前を保存する材料フィールドがあります。
タグは材料に似ており、レシピごとに複数のタグが存在する可能性があります。例:Mom's Chicken Recipeにはタグ(カンマで区切られています)があります:yummy、chicken、 thanksgivingタグには、recipe_idフィールドとタグの名前を格納するタグフィールドもあります。
今、私はSphinx Searchを実装していて、
- レシピID(recipes.id)
- レシピ名(recipes.name)
- 材料ID( components.id )
- 材料名( components.ingredient )
- 対応するレシピID(components.recipe_id)
- タグID(tags.id)
- タグ名(tags.tag)
- 対応するレシピIDのタグ(tags.recipe_id)
私の思考プロセス(私はかなりのプログラマーであり、Sphinxを発見したばかりです)は、上記のすべての行を組み合わせたMYSQLビューを作成することであるため、次のようなビューが得られます。
- RecipeName:To'Good Chicken Soup ......タグ:おいしい......材料:チキン
- RecipeName:To'Good Chicken Soup ...... Tag:Delicious ...... Ingredient:Chicken
- RecipeName:To'Good Chicken Soup ...... Tag:Soup ...... Ingredient:Chicken
- RecipeName:To'Good Chicken Soup ......タグ:おいしい......材料:水
このメソッドの問題は、ご覧のとおり、多くの行が重複していることです。しかし、これは私が考えることができる唯一の方法だったので、私は先に進んで、これを使って新しいビューを作成しました:
SELECT
recipes.id,
recipes.name,
ingredients.ingredient,
tags.tag
FROM
recipes, ingredients, tags
WHERE
recipes.id=ingredients.recipe_id
AND recipes.id=tags.recipe_id;
このコードをmysqlに組み込んだのですが、それに対応するタグ/成分を持つレシピしか取得していませんか?また、これは私のmysqlビューを構造化するための正しい方法ですか?
助けてくれてありがとう!