我有一个有趣的问题,我无法理解,在我试着解释它的时候和我一样。
假设我有一个广告表,我正在尝试对其进行过滤。每个广告都可以包含许多“类型”,这些“类型”存储在类型表中,与中间的 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被命名为“books”,类型ID 2被命名为“magazine”。在上面的查询中,我希望收到所有用于书籍,杂志或书籍和杂志的广告。
这在MySQL中运行良好,但在我的Sphinx索引中效果不是很好,这是我的问题。如果我过滤“杂志”,我只会收到杂志的广告;没有书籍和杂志。但是,如果我搜索“书籍”,我会成功地获得我想要的一切。我看不出我哪里错了。我的索引中是否需要不同类型的连接?或者在Sphinx中可能采用不同的排序模式。
我在不同的过滤器中成功完成了相同的操作,但是在1:1的关系中,所以有些事情让我相信我的查询中存在问题以及Sphinx处理多个记录的方式。
我感谢我可能没有尽可能清楚,但是对于我应该看的地方的任何建议都受到了极大的欢迎。
谢谢!