Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails-将复杂的可见性设置应用于sphinx结果_Ruby On Rails_Mysql_Thinking Sphinx - Fatal编程技术网

Ruby on rails rails-将复杂的可见性设置应用于sphinx结果

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

在我正在开发的产品中,我有一个消息模型

消息可以限制为组,也可以不限制(可用于 所有人)

如果用户属于某个消息组或消息不属于 受限,用户可以查看消息

下面是选择可见消息的查询(希望它可以 澄清我的意思)

(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) )
 )
是否有可能以某种方式将此可见性设置应用于思考 斯芬克斯的结果?意思是将此或应用于

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
}