可以在 sphinx api 中设置过滤器/条件以向配置选择添加“与”条件吗?(或表现得像一个“与”条件)?
SetFilter
没有像我预期的那样工作,因为我正在使用sql_attr_multi
它,它创建了一个包含找到匹配项的数组......并且排序定义的属性被最新的属性覆盖。
如果我在配置中设置“AND 条件”选择它可以正常工作,但我需要动态使用它。
或者也许使用sql_query
in php 来动态设置条件?
OR setSelect ("*, AND 条件")
编辑
我有 3 张桌子
-companies table
-projects table
-companies_projects table (company id, project_id, company_package)
同一家公司可能有多个项目。
每个项目的公司包可能不同(用于排序)。
sql_attr_multi = uint project from query; SELECT company_id, project_id FROM companies_projects
它会找到合适的公司,但如果该公司有多个项目,则项目属性变为 (8, 10)。
关于项目号 8 - 包是 2,
在项目编号上。10 - 包装为 1
我应用过滤器
$sphinxClient->setFilter('project', array(8));
问题是 company_package 被最后一个条目(在数据库中)覆盖,我不知道为什么。
所以company_package
for项目没有。8 应该是 2,我得到的是 1,witch 是项目号的包。10.
如果我添加WHERE project_id = '8'
工作sql_query
正常,但我需要一个动态解决方案,所以我不需要为每个项目创建一个配置文件
编辑:
sql_query = \
SELECT \
id, company, \
company_package, UNIX_TIMESTAMP(date) AS date \
FROM companies AS c \
INNER JOIN companies_projects AS cp ON c.id = cp.company_id
公司表:id,公司
公司项目:项目 ID、公司 ID、公司包、日期
编辑
[1] => Array
(
[weight] => 1
[attrs] => Array
(
[company_package] => 2
[date] => 1367224201
[project] => Array
(
[0] => 8
)
)
)
[2] => Array
(
[weight] => 1
[attrs] => Array
(
**[company_package] => 1** it should be 2
[date] => 1367224202
[project] => Array
(
[0] => 8
[0] => 10
)
)
)
我附上了一个例子。它会找到合适的公司。
第一个键没问题,因为公司没有。1 只是在项目 8 上
第二把钥匙不好,因为公司没有。2 两个都没有。8个和10个这样的项目:
公司 1,项目 8,包 = 2
公司 2,项目 8,包 = 2
公司 2,项目 10,包 = 1
所以,公司没问题,但是包被公司 2、项目 10、包 = 1 覆盖如果我删除这条记录......或者如果我添加 AND project_id=8 一切正常