GROUP BY
を使用する必要があるようです およびHAVING
条項。
SELECT
`product_id`,
COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
(`attr_id` = ? AND `value_id` = ?)
OR (`attr_id` = ? AND `value_id` = ?)
/* additional as necessary
OR (`attr_id` = ? AND `value_id` = ?)
*/
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */
product_id
全体で一意のインデックスがあることを確認してください およびattr_id
これが正しく機能するためには(製品が同じattr_id
を持つ複数のレコードを持つことはおそらく意味がないため、すでにこれを持っているはずです。 。
また、SQLで使用するために値をエスケープしていない場合は、エスケープしていることを確認する必要があります。ここでは、これらの変数を?
で示しています。 これは、プリペアドステートメントを使用している場合、このSQLを作成する方法になります。