私が開発している製品には、メッセージモデルがあります。
メッセージは、グループに制限することも、制限しない (全員が利用可能) こともできます。
ユーザーがメッセージのグループのいずれかに属している場合、またはメッセージが制限されていない場合、ユーザーはメッセージを見ることができます。
ここに表示されるメッセージを選択するクエリがあります(私が何を意味するかを明確にすることができることを願っています)
(2,3,4,5,6,1) はユーザーが属するグループで、ユーザーごとに異なります
SELECT `messages`.* FROM `messages`
LEFT JOIN groups_messages ON
messages.id=groups_messages.message_id AND groups_messages.group_id in (2,3,4,5,6,1)
WHERE (messages.restricted=0 OR groups_messages.group_id is not NULL)
GROUP BY messages.id
ここにサブクエリを使用した類推クエリがあります。必要なものを明確にするのに役立つことを願っています
SELECT * FROM `messages` WHERE
(
restricted=0 OR id in ( select distinct message_id from groups_messages where group_id in (2,3,4,5,6,1) )
)
この可視性設定を思考スフィンクスの結果に適用することは何とか可能ですか? この OR と IN を適用する意味
Message.search "test" with/with_all
?
それが不可能な場合は、別の質問になります。検索で見つかったすべてのオブジェクトの ID を取得することは何とか可能ですか?
AND を WHERE 条件に追加するだけで、自分でクエリを実行できるようになります
SELECT * FROM `messages` WHERE
(
restricted=0 OR id in ( select distinct message_id from groups_messages where group_id in (2,3,4,5,6,1) )
)
AND id in (ids_of_the_messages_found_by_thinking_sphinx)
LEFT JOIN を使用しないクエリと WHERE に AND を追加するクエリの両方が、mysql のリソースを少し消費すると思いますが、他の解決策が不可能な場合は、これで十分です。
ありがとう、
パベル・K