フィルタリングしようとしている広告テーブルがあるとしましょう。各広告には、中間のadvert_typesテーブルに関連付けられた、タイプテーブルに格納される多くの「タイプ」を含めることができます。かなり標準:
adverts
-------
id
name
types
-----
id
name
advert_types
------------
id
advert_id
type_id
ユーザーが選択した 1 つ以上のタイプ ID にあるすべての広告を検索しようとしています。
SELECT a.id, a.name, at.type_id
FROM adverts as a
LEFT JOIN advert_types as at
ON a.id = at.advert_id
WHERE at.type_id IN(1,2);
ここで、広告にはタイプを関連付ける必要がないことに注意してください (したがって、左結合)。
タイプ ID 1 の名前が「本」で、タイプ ID 2 の名前が「雑誌」であるとします。上記のクエリでは、書籍、雑誌、または書籍と雑誌の両方に関するすべての広告を受け取ることが期待されます。
これは MySQL では問題なく機能しますが、Sphinx インデックスではうまく機能しません。これが私の問題です。「雑誌」でフィルタリングすると、雑誌が返された広告のみが表示されます。本と雑誌の両方でなし。しかし、「本」で検索すると、思い通りにすべてを取得できました。どこが間違っているのかわかりません。インデックスに別の種類の結合が必要ですか? または、Sphinx の別の並べ替えモードかもしれません。
別のフィルターで同じことを成功させましたが、1:1 の関係で、クエリと Sphinx が複数のレコードを処理する方法に問題があると思われます。