sphinx api でフィルター/条件を設定して、構成選択に「AND」条件を追加することは可能ですか? (または「AND」条件のように振る舞う) ?
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
プロジェクト番号。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、会社
company_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 はちょうどプロジェクト no.8 にあります
2番目のキーは、会社がいいえません。2は両方にありません。このような8および10のプロジェクト:
会社 1、プロジェクト 8、パッケージ = 2
会社 2、プロジェクト 8、パッケージ = 2
会社 2、プロジェクト 10、パッケージ = 1
したがって、会社は問題ありませんが、パッケージは会社 2、プロジェクト 10、パッケージ = 1 から上書きされます。このレコードを削除するか、AND project_id=8 を追加すると、すべて問題ありません。