gpt4 book ai didi

ruby-on-rails - rails - 将复杂的可见性设置应用于思维狮身人面像结果

转载 作者:行者123 更新时间:2023-11-29 07:15:22 25 4
gpt4 key购买 nike

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

消息可以限制在组内,也可以不限制(可用于每个人)。

如果用户属于消息组之一或消息不属于受限制,用户可以看到消息。

这里是选择可见消息的查询(希望它能澄清我的意思)

(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

最佳答案

收到 Thinking Sphinx 开发者 Pat Allan 的回复,

link text

I think the best way is to build a string that includes 0 if the
message is unrestricted, otherwise returns the group ids, concatenated
together with commas... ie: "2,3,4,5,6" or "0"

So, you'll want to build a SQL snippet for an attribute, something
vaguely like:

has "IF(messages.restricted = 0, '0', GROUP_CONCAT (groups_messages.group_id SEPARATOR ','))", :as => :group_ids, :type => :multi

And then for searching:

Message.search "foo", :with => {
:group_ids => [0] + current_user.message_group_ids
}

The SQL snippet will have to be different if you're using PostgreSQL, though... let me know if that's the case.

会试试看

关于ruby-on-rails - rails - 将复杂的可见性设置应用于思维狮身人面像结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com