Sphinxsearch与左连接和和或条件

时间:2015-02-12 12:49:53

标签: sql sphinx

存储

ID 名称

品牌

ID 名称

brand_store

STORE_ID brand_id

产品

ID 名称 描述 brand_id STORE_ID

现在我想执行查询

select p.* from product p
LEFT join brand_store bs ON bs.brand_id=p.brand_id
where
p.id NOT IN (1,5,4)
AND p.brand_id in (1487,457,5725)
and (bs.store_id = 1 OR p.store_id =1) 

可以建议sphinx.conf中的sql_query应该是什么,以及如何设置过滤器?

1 个答案:

答案 0 :(得分:1)

一般规则是sql_query应该: -

SELECT 您可能需要过滤的所有列(从原始的WHERE),或检索,排序,分组等基本上所有需要输入索引的数据。

加入获取这些列所需的所有表格

通常会避免 WHERE - 因为过滤将在Sphinx中完成,但可以排除您知道永远不需要匹配的行(例如,非活动行)

通常会避免使用 GROUP BY - 再次在Sphinx中进行分组

通常避免使用 ORDER BY - 无论如何都会重新排序结果,sql_query仅用于构建索引。

使用sql_attr*指令定义哪些列成为属性,字段或两者。