我有一个有效的书籍
和类别
的sphinx索引(多对多连接)
source books : base
{
sql_attr_multi =uint categories from query; \
select book_id, category_id\
from books\
join book_categories on book_categories.book_id = books.id
}
所以,如果我使用 MySQL 连接来检索记录,它将如下所示:
-- get all books that are in categories 2 and 3 at the same time
SELECT id FROM books WHERE categories = 2 AND categories = 3;
这将为我提供属于类别 2 和 3 的书籍列表,但也可以属于任何其他类别。
我想要做的是将结果限制为那些仅属于类别 2 和 3 而不是任何其他类别的图书。
考虑到所有类别的列表太大而无法在 NOT IN ()
中指定,这可能吗?
最佳答案
从 sphinx v2.1.2 开始,有一个 LENGTH() 函数,返回 MVA 的长度:)
SELECT id FROM books WHERE categories = 2 AND categories = 3 AND LENGTH(categories) = 2;
函数并不总是在 WHERE 中工作,所以如果上述失败可以尝试
SELECT id, LENGTH(categories) as len FROM books
WHERE categories = 2 AND categories = 3 AND len = 2;
(假设您确实是指 AND 查询。OR 查询会更棘手,但 XOR 会很容易)
关于mysql - Sphinx sql_attr_multi - 如何找到值的精确组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826969/