dans le produit que je développe, j'ai un modèle de message.rails - appliquer des paramètres de visibilité complexes aux résultats de sphinx de réflexion
Le message peut être restreint à des groupes ou ne pas être restreint (disponible pour tout le monde).
Si l'utilisateur appartient à l'un des groupes de messages OU que le message n'est pas restreint, l'utilisateur peut voir le message.
ici est la requête la sélection des messages visibles (dans l'espoir qu'il peut clarifier ce que je veux dire)
(2,3,4,5,6,1) sont les groupes utilisateur appartient, ils sont différents pour chaque utilisateur
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
ici est question une sous-requête analogique, dans l'espoir qu'il aide à clarifier ce qui est nécessaire
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))
)
est-il possible en quelque sorte d'appliquer ce paramètre de visibilité à penser résultats sphinx? signifiant appliquer ce OU et IN à
Message.search "test" with/with_all
?
s'il est impossible, une autre question serait - est-il en quelque sorte possible d'obtenir ids de tous les objets trouvés à la recherche,
pour que je puisse effectuer moi-même interroger, tout ajout et à mon OÙ état
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)
j'imagine à la fois la requête sans LEFT JOIN et ajout à OÙ sera un peu gourmand en ressources MySQL, mais si d'autres solutions sont pas possible, cela ferait
grâce,
Pavel K