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

标签 mysql sphinx

我有一个有效的书籍类别的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 的书籍列表,但也可以属于任何其他类别。

enter image description here

我想要做的是将结果限制为那些仅属于类别 2 和 3 而不是任何其他类别的图书

enter image description here

考虑到所有类别的列表太大而无法在 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/

相关文章:

MYSQL:带有 if 语句的过程

java - 如何使用 Spring-data-JPA 使用 crudRepository 在 MySQL 数据库中附加多条记录?

search - Sphinx 搜索 max_matches 错误

ruby-on-rails - 如何在没有循环依赖的情况下使用 Thinking Sphinx 在 Rails 5 中索引多态 (STI) 模型?

mysql - Docker:将 table.sql 导入 mydatabase

php - 算一个很复杂的select mysql

mysql - 获取超过 x 个订阅者的博客数量

php - sphinx 的控制面板?

php - sphinx 如何知道数据已更新以及哪些行已更新?