1

假设我有一个广告表,我正在尝试对其进行过滤。每个广告可以有许多“类型”,这些“类型”存储在类型表中,与中间的advert_types表相关联。很标准:

adverts
-------
id
name

types
-----
id
name

advert_types
------------
id
advert_id
type_id

我只是想搜索用户选择的一个或多个类型 ID 中的所有广告:

SELECT a.id, a.name, at.type_id
    FROM adverts as a
    LEFT JOIN advert_types as at 
    ON a.id = at.advert_id
    WHERE at.type_id IN(1,2);

我应该在这里注意,广告不需要有与之关联的类型(因此是左连接)。

假设类型 ID 1 被命名为“书籍”,类型 ID 2 被命名为“杂志”。在上面的查询中,我希望收到所有关于书籍、杂志或书籍和杂志的广告。

这在 MySQL 中运行良好,但在我的 Sphinx 索引中不太好,这是我的问题。如果我过滤“杂志”,我只会收到返回杂志的广告;书籍和杂志都没有。但是,如果我搜索“书籍”,我会成功获得我想要的一切。我看不出我哪里错了。我的索引中是否需要不同类型的联接?或者可能是 Sphinx 中的不同排序模式。

我已经在不同的过滤器中成功地完成了相同的操作,但关系是 1:1,所以有些事情让我相信我的查询和 Sphinx 处理多条记录的方式存在问题。

4

0 回答 0