Properties
(pid、uid、pname、pvalue)というテーブルがあります 。pid 列は自動生成されます。各 uid (ユーザー ID) は、pname と pvalue に複数の名前と値のペアを格納できます。
入力として、複雑なブール式を形成する pname と pvalue の名前と値のペアが複数あります。
例: 1 つの名前と値のペアから始めましょう。「favorite_color」が「red」であるすべての uid を取得したいとします。
私はSQLクエリを書きました:
SELECT *
FROM properties
WHERE ((pname = 'favorite_color') and (pvalue = 'red'))
'favorite_color' が 'red' または 'blue' であり、'favorite_drink' が 'juice' または ''milk' であり、'favorite_ Hobby' が 'music' であるすべての uid をフェッチするようなものを取得する必要がある場合、クエリはすぐに複雑になります。または「芸術」など。
私はSQLクエリを書きました:
SELECT *
FROM properties
WHERE (((pname = 'favorite_color') and (pvalue = 'red'))
OR ((pname = 'favorite_color') and (pvalue = 'blue')))
AND (((pname = 'favorite_drink') and (pvalue = 'juice'))
OR ((pname = 'favorite_drink') and (pvalue = 'milk')))
AND (((pname = 'favorite_hobby') and (pvalue = 'music'))
OR ((pname = 'favorite_hobby') and (pvalue = 'art')))
式は正しくなりましたが、残念ながら各行で評価が行われるため失敗します。where 句にさらに名前と値のペアを追加したい場合はどうすればよいでしょうか?
質問:
これを記述してSQLクエリを実行することは可能ですか?
私が持っていたもう 1 つのアイデアは、各ユーザーのすべての pname と pvalue のペアを取得し、式言語を使用して動的な式を作成し、入力された名前の値 paris を評価することでした。私はApacheのJEXLを念頭に置いています。