MySQL で複数引数の検索クエリを実行すると問題が発生します。
SELECT item.* from item, attr, attr_xref
WHERE attr_xref.item = item.id
AND attr.id = attr_xref.attrID
AND (
(attr.name = 'city' AND attr.val LIKE '%new york%')
OR
(attr.name = 'floor' AND attr.val = 6)
)
クエリはphpで動的に生成されますが、問題はありません。
問題は、このクエリが厳密な検索を返さないことです。都市または階のいずれかが検索値と等しいアイテムが返されます。
ご覧のとおり、問題はここにあります。AND attr.id = attr_xref.attrID
この行は、複数の属性を持つアイテムに対して複数の値を返し、OR
演算子を削除します。単一の属性を複数の異なる名前と値に一致させようとしますが、ID は 1 つにします。
これを克服する方法はありますか?
これは生の例であり、実行時に 2.3 を超える検索引数を使用する場合があります。
ありがとう、あなたの助けを楽しみにしています!
編集: 受け入れられた回答に投稿されたSQLクエリを使用して機能し、これを追加しました:
AND (a_city.id IS NOT NULL
OR a_floor.id IS NOT NULL)
GROUP BY imobil.id
HAVING COUNT(*) = 2
結果をグループ化してカウントしたい場合、'= 2' は渡された引数の数を意味し、これは PHP でカウントされます。ありがとうございます。問題がある場合は、この質問を読みたいと思うかもしれません