【发布时间】:2013-04-30 07:16:50
【问题描述】:
是否可以在 sphinx api 中设置过滤器/条件以向配置选择添加“AND”条件? (或表现得像一个“与”条件)?
SetFilter 没有按我的预期工作,因为我使用的是sql_attr_multi,它会创建一个包含找到匹配项的数组...并且排序定义的属性会被最新的属性覆盖。
如果我在配置中设置“AND 条件”选择它可以正常工作,但我需要动态使用它。
或者也许使用 php 中的sql_query 来动态设置条件?
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 代表项目编号。 8 应该是 2,我得到的是 1,witch 是项目号的包。 10.
如果我在sql_query 中添加WHERE project_id = '8' 工作正常,但我需要一个动态解决方案,所以我不需要为每个项目创建配置文件
编辑:
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、公司
companies_projects:project_id、company_id、company_package、日期
编辑
[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 一切正常
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/10090158/…
-
感谢您的快速回答,但这不是我打算做的。我将用详细的解释更新初始描述。
-
你的 sql_query 是什么?因为我看不到 company_package 的索引位置...