Ruby on rails rails-将复杂的可见性设置应用于sphinx结果
在我正在开发的产品中,我有一个消息模型 消息可以限制为组,也可以不限制(可用于 所有人) 如果用户属于某个消息组或消息不属于 受限,用户可以查看消息 下面是选择可见消息的查询(希望它可以 澄清我的意思) (2,3,4,5,6,1)是用户所属的组,这些组因 每个用户Ruby on rails rails-将复杂的可见性设置应用于sphinx结果,ruby-on-rails,mysql,thinking-sphinx,Ruby On Rails,Mysql,Thinking Sphinx,在我正在开发的产品中,我有一个消息模型 消息可以限制为组,也可以不限制(可用于 所有人) 如果用户属于某个消息组或消息不属于 受限,用户可以查看消息 下面是选择可见消息的查询(希望它可以 澄清我的意思) (2,3,4,5,6,1)是用户所属的组,这些组因 每个用户 SELECT `messages`.* FROM `messages` LEFT JOIN groups_messages ON messages.id=groups_messages.message_id AND groups_m
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) )
)
是否有可能以某种方式将此可见性设置应用于思考
斯芬克斯的结果?意思是将此或应用于
Message.search "test" with/with_all
?
如果这是不可能的,另一个问题是——不知为什么
可以获取搜索中找到的所有对象的ID
这样我就可以自己执行查询,只需将和添加到我的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)
我想象没有左连接的查询和向何处添加和
对于mysql来说,将有点资源密集型,但是如果其他解决方案
不可能,那么这就行了
谢谢
帕维尔K收到了思考斯芬克斯的开发者帕特·艾伦的回复 我认为最好的方法是构建一个包含0的字符串,如果
消息不受限制,否则返回连接的组ID
加上逗号。。。即: “2,3,4,5,6”或“0” 因此,您需要为属性构建一个SQL代码段,比如
隐约地像: 然后进行搜索: 但是,如果您使用的是PostgreSQL,那么SQL代码段必须有所不同。。。如果是这样,请告诉我 我会试试的
has "IF(messages.restricted = 0, '0', GROUP_CONCAT (groups_messages.group_id SEPARATOR ','))", :as => :group_ids, :type => :multi
Message.search "foo", :with => {
:group_ids => [0] + current_user.message_group_ids
}