私はこのクエリを使用しようとしています:
SELECT COUNT(PF.PageID) AS Total,P.PageID FROM ページ P LEFT JOIN Pages_Filters PF ON PF.PageID=P.PageID WHERE P.PageID IN ( (ページIDを選択 FROM Pages_Filters WHERE フィルター ID="1" AND FilterOptionID="2" )、 (ページIDを選択 FROM Pages_Filters WHERE フィルター ID="7" AND FilterOptionID="57" ) ) AND P.PageID !="283" GROUP BY PF.PageID
エラーが発生します:
Sub-query returns more than 1 row
MySQL ですべてのサブクエリの結果をマージし、メイン クエリの IN 句として共通の値を使用するようにしたいと考えています。
したがって、最初のサブクエリが 1,2,4 を返し、2 番目のサブクエリが 2,3,4 を返す場合、"in" 句は次のようになります。
WHERE P.PageID IN (2,4)
2 と 4 は、2 つのサブクエリに共通する値であるためです。
これは1つのクエリで可能ですか?
アップデート:
質問をもう少し明確にしようと思います。
結果は、指定されたフィルターが特定の値に設定されているすべてのページを返す必要があります。これには、クエリの一部ではない追加のフィルターが設定されているページが含まれます。言い換えれば、特定のフィルターが配置されたページにいて、ここから移動できるすべてのページで同じフィルターがあり、さらに 1 つのフィルター セットが追加されているページを表示します。
説明するのは少し難しいですが、同じフィルター ID に対して異なる値を持つページではなく、他のフィルター セットを持つページを含む結果セットを探しています。
したがって、この例では、フィルター 1 が値 2 に設定され、フィルター 7 が 57 に設定されているすべてのページが必要です。また、他のフィルター (1 と 7 以外) が割り当てられているページも必要ですが、フィルター 7 が値 2 に設定されているページは必要ありません。 57 以外の値、およびフィルター 1 が 2 以外の値に設定されているページではありません。
サンプルデータで更新
Pages_Filters:
PageID FilterID FilterOptionID 297 2 5 297 7 57 297 9 141 305 2 5 101 2 5 101 7 57
ページ:
ページID ページ名 297 いくつかのページ 305 別のページ 101 愚かなページ
この場合、「フィルター 2 が 5 に設定され、フィルター 7 が 57 に設定され、フィルター 9 が 141 に設定されているページはどれか」と尋ねることができるはずです。
答えは「297のみ」のはずです。