2014-05-23 27 views
0

我有bookscategories工作斯芬克斯指数(多对多连接)Sphinx sql_attr_multi - 如何找到确切的值组合?

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类书籍的清单,但也可以在任何其他类别中。

enter image description here

我想要做的是搜索结果限制为那些书籍,只在类别2和3,而不是在任何其他类别

enter image description here

这是可能的,因为所有类别的清单是大的NOT IN()指定呢?

+0

心不是你的第二个维恩图,显示出2 XOR 3?即,或者,但不是两者。但在描述中,是在说和。所以维恩图应该是蓝色的2和3之间的**重叠**。 – barryhunter

回答

1

狮身人面像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; 

(假设你真的均值和查询。OR查询会更棘手,但XOR会很容易)