可以在sphinx api中設置一個過濾器/條件來向配置選擇添加一個'AND'條件? (或者表現得像'AND'條件)?SphinxSearch - setFilter使用sql_attr_multi
SetFilter
並不像我想象的那樣工作,因爲我使用的是sql_attr_multi
,它創建了一個包含匹配的數組... ...並且排序定義的屬性被最新的屬性覆蓋。
如果我在配置中設置'AND條件'選擇它可以正常工作,但我需要使用它dinamically。
或者也許使用sql_query
在PHP中設置條件dinamically?
OR setSelect( 「*和條件」)
編輯
我有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
它找到合適的公司,但如果公司在多個項目上,項目attr變成(8,10)。
關於項目編號。 8 - 包是2,
在項目沒有。 10 - 包裝爲1
我應用過濾器
$sphinxClient->setFilter('project', array(8));
的問題是,company_package由最後一個條目(在數據庫中)覆蓋,我不`噸知道爲什麼。
所以company_package
項目沒有。 8應該是2,我會得到1,女巫是項目編號的包。 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,company
companies_projects:project_id,company_id,company_package,date
編輯
[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
)
)
)
我atached一個例子。它找到合適的公司。
第一個關鍵是好的,因爲公司沒有。 1只是項目編號。8
第二個關鍵不好,因爲公司沒有。 2在兩個沒有。圖8個10個項目是這樣的:
公司1,項目8,包= 2
公司2,項目8,包= 2
公司2,項目10,包= 1
所以,公司是好的,但包是從公司覆蓋2,項目10,包= 1 如果我刪除此記錄...或者如果我添加AND project_id = 8一切正常
這是回答yuor問題嗎? http://stackoverflow.com/questions/10090158/and-multiple-values-of-a-filter-in-sphinx/10093811#10093811 – barryhunter 2013-04-30 10:11:55
感謝您的快速回答,但不是我渴望的做。 我會用詳細的解釋來更新初始描述。 – 2013-04-30 11:40:11
什麼是你的sql_query?因爲我沒有看到company_package被索引在哪裏... – barryhunter 2013-04-30 12:57:06