Mysql Sphinx sql_attr_multi-如何找到值的精确组合?
我有一个Mysql Sphinx sql_attr_multi-如何找到值的精确组合?,mysql,sphinx,Mysql,Sphinx,我有一个书籍和类别的斯芬克斯索引(多对多连接) 因此,如果我使用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类而不属于任何其他类别的书
书籍
和类别
的斯芬克斯索引(多对多连接)
因此,如果我使用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类而不属于任何其他类别的书籍上
考虑到所有类别的列表太大,无法在
而不是()中指定它,这是可能的吗 从sphinx v2.1.2开始,有一个LENGTH()函数,返回MVA的长度:)
函数不总是在何处工作,所以如果上面失败,可以尝试
SELECT id, LENGTH(categories) as len FROM books
WHERE categories = 2 AND categories = 3 AND len = 2;
(假设你真的是指和查询。OR查询会更复杂,但XOR会很容易)你的第二个维恩图不是显示了2或3吗?也可以,但不能两者兼而有之。但在描述中,是说和。因此,维恩图应该是蓝色的2和3之间的重叠。
SELECT id FROM books WHERE categories = 2 AND categories = 3 AND LENGTH(categories) = 2;
SELECT id, LENGTH(categories) as len FROM books
WHERE categories = 2 AND categories = 3 AND len = 2;