次のテーブルがあります。
- ウィジェット
- 田畑
- Widgets_Fields
ウィジェット テーブルは、id、user_id、追加/更新などを含む単純な製品/リスト テーブルです。
フィールド テーブルには、ウィジェットのフィールド名が一覧表示されます。フィールドの数に制限はありません (高さ、幅、価格、製造年、色など)。フィールド テーブル:
- ID
- 名前
各ウィジェットには、任意の数のフィールドと値を関連付けることができます。Widgets_Fields テーブルは次のようになります。
- ID
- field_id
- widget_id
- 価値
ウィジェットまたはウィジェットのグループのすべてのフィールドを取得したいだけの場合は、非常に簡単です。
select widget_id from widgets_fields where widget_id = xxx
しかし、ウィジェットを検索していて、フィールドに特定の値を持つウィジェットだけを見つけたい場合はどうすればよいでしょうか? 実行可能
select widget_id from widgets_fields where field_id = xxx and value = xxx
複数のフィールドに基づいてウィジェットを選択したいときに問題が発生します。たとえば、「赤」または「オレンジ」であり、かつ年が 2012 または 2011 であるすべてのウィジェット
select widget_id from widgets_fields where
(field_id = xxx and (value = 'red' or value = 'orange')
and
(field_id = xxy and (value = 2012 or value = 2011)
これは不可能な場所を生み出します。あるいは、私はこのようなことをすることができます
select widget_id from widgets_fields where
field_id in (xxx, xxy)
and value in ('red', 'orange', 2012, 2011)
ただし、提供されたフィールドIDのいずれかで指定された値を探すため、必ずしも必要なものが返されるとは限りません。
最後に、私の質問は、これを達成するためのクエリを適切に作成する方法があるかどうかです。あるに違いないと確信していますが、私はしばらくの間それに取り組んできましたが、まだ解決策を考え出していません。