Sphinx sql_attr_multi - 如何找到确切的值组合?

时间:2014-05-23 10:34:08

标签: mysql sphinx

我的狮身人面像指数为bookscategories(多对多连接)

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 ()中指定它吗?

1 个答案:

答案 0 :(得分:1)

从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;

(假设你真的意味着和查询。一个OR查询会更棘手,但XOR会很容易)