私は次のようなSQLクエリを持っています:
SELECT `categories`.`partnumbersafe`, `filters`.`filtername`, `filters`.`filtervalue`
FROM `products_categories` AS `categories`
LEFT OUTER JOIN `products` AS `product` ON `categories`.`partnumbersafe` = `product`.`partnumbersafe`
LEFT OUTER JOIN `products_filters` AS `filters` ON `categories`.`partnumbersafe` = `filters`.`partnumbersafe`
WHERE `categories`.`categoryid` =4
AND (`product`.`visibility` =1 OR `product`.`visibility` =2)
AND `product`.`status` =1
これにより、フィルター名とフィルター値が異なる複数のpartnumbersafeエントリ(同じ値)があるという結果が得られます。例えば:
partnumbersafe filtername filtervalue
123 brand toyota
123 model F5
123 type business
678 brand toyota
678 model F6
クエリはPHPによって生成されます。PHPスクリプトにfilterdataを保持するPOST値もあります(ブランドはトヨタ、モデルはF6など)。
これらの結果をfiltername/valueのペアでフィルタリングするにはどうすればよいですか?phpソリューションではなくsqlクエリソリューションを使用します。このソリューションでは、ブランドがトヨタでモデルがF6のpartnumbersafeをクエリできます。上記の表のpartnumbersafe123のみを取得するようにします。
テーブルproducts_filtersは、上記のテーブルの概要で表されているすべてのデータを保持します。