Sepertinya Anda perlu menggunakan GROUP BY
dan HAVING
klausa.
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 */
Pastikan Anda memiliki indeks unik di seluruh product_id
dan attr_id
agar ini berfungsi dengan baik (Anda seharusnya sudah memiliki ini karena sepertinya tidak masuk akal jika suatu produk memiliki banyak catatan dengan attr_id
yang sama ).
Anda juga perlu memastikan bahwa Anda keluar dari nilai Anda untuk digunakan dalam SQL Anda jika Anda belum melakukannya. Saya menunjukkan variabel-variabel ini di sini dengan ?
yang, jika Anda menggunakan pernyataan yang disiapkan, akan menjadi cara Anda menulis SQL ini.