在我正在开发的产品中,我有一个消息模型。
消息可以限制在群组中,也可以不受限制(适用于所有人)。
如果用户属于消息组之一或消息不受限制,则用户可以看到该消息。
这是选择可见消息的查询(希望它可以澄清我的意思)
(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 的查询和添加 AND 到 WHERE 对于 mysql 来说都会有点资源密集型,但如果其他解决方案不可行,那么这会做
谢谢,
帕维尔·K