XnViews データベースに対して使用するために、「単純化された」SQL クエリを機能する SQLite クエリに変換しようとしています。
例は「(cat_10 and cat_12) and (cat_5 or cat_7)」です。
これは、フィールド "if" (fileID) および "ic" (categoryID) を持つテーブル "t3" に対して使用する必要があります。
エントリは次のようになります。
if, ic
7, 10
7, 12
7, 4
9, 10
9, 12
9, 5
10, 10
10, 12
10, 7
上記の単純化されたクエリは、ファイル 9 と 10 のみを選択する必要があります。これは、7 には必要なカテゴリ 10 と 12 がありますが、5 と 7 のどちらも含まれていないためです。
実際の問題は、2 つのカテゴリ間の AND を単純に機能させるのにすでに数時間かかったので、その地獄のようなクエリ ステートメントを作成することです。
SELECT if FROM t3 WHERE ic IN (10, 12) GROUP BY if HAVING count(if) = 2
これにより、カテゴリ 10 と 12 を含むすべてのファイル ID が得られますが、それを残りの "および (cat_5 または cat_7)" とどのように組み合わせる必要があるかわかりません。
これらの単純化された sql ステートメント (html と js で作成された click-it-together-builder によって作成された) を計画したとき、単純に "cat_5" を "t3.ic = 5" に置き換え、残りはそのままにすることを計画していました。
もちろん、 where がエントリ全体をチェックするように機能しないとは予想していませんでした。ic = 5 AND ic = 7 はあり得ません。
したがって、( x と y ) のペアに限定されない可能性があることを念頭に置いて、これらの単純なクエリを実際に機能するクエリに変換する方法を誰かが知っているかどうか疑問に思っています。
編集:私が与えた例を実行する方法を考え出しました。少なくとも:
SELECT if FROM t3 WHERE ic IN (10, 12) GROUP BY if HAVING count(if) = 2
INTERSECT
SELECT if FROM t3 WHERE ic IN (5, 7) GROUP BY if
しかし、現在の主な問題は ( ) を正しい順序で解決することです。
編集 2: group_concat() を使用してカテゴリを 1 つのフィールドにグループ化しようとしていると思いますそしてそれはうまくいくはずです。「すべき」を強調する。