製品のテーブル、カスタム定義のテーブル、および値のテーブルがあります。
製品
id product_name price
48 product one 32.99
87 another product 2.50
...etc
フィールド定義
id name
6 brand
9 colour
23 flavour
...etc
フィールド値
product_id fielddef_id value
48 6 Rowntree
48 9 Red
48 23 Strawberry
87 6 Cadburys
87 9 Yellow
87 23 Lemon
etc...
各フィールド定義のドロップダウン選択を備えたフィルターを使用して検索を実行しようとしています:
$sql = "SELECT * FROM products INNER JOIN fieldvals ON fieldvals.product_id=products.id WHERE product_name LIKE '%".$q."%' AND (fielddef_id='7' AND value='".$c."' ) AND (fielddef_id='8' AND value='".$b."') AND (fielddef_id='9' AND value='".$f."') AND (fielddef_id='10' AND value=' ".$t."') AND (fielddef_id='5' AND value='".$h."') AND (fielddef_id='6' AND value='".$v."')";
SQL をエコーすると、次のような結果が得られます。
SELECT * FROM products INNER JOIN fieldvals ON fieldvals.product_id=products.id WHERE product_name LIKE '%cola%' AND (fielddef_id='7' AND value='Purple') AND (fielddef_id='9' AND value='Apple' ) AND (fielddef_id='10' AND value='Party') AND (fielddef_id='5' AND value='true') AND (fielddef_id='6' AND value='true')
このコードは、$q の後の 1 つの基準に対してのみ機能します。つまり、$q と $c、または $q と $h、または $q と $v を含めることができ、一致する製品を正常に検出できますが、ネストされた複数の AND ステートメントは機能しません。動作するようです。
どこが間違っていますか?