ID Pilih MySQL Berlaku pada Baris Berbeza dengan Berbilang Nilai Lajur Tertentu
Masalah:
Memilih item daripada jadual bersekutu berdasarkan berbilang nilai yang ditentukan untuk lajur tertentu ialah tugas biasa tetapi mencabar. Sebagai contoh, berdasarkan jadual:
item_id | category_id |
---|---|
1 | 200 |
1 | 201 |
1 | 202 |
2 | 201 |
2 | 202 |
3 | 202 |
3 | 203 |
4 | 201 |
4 | 207 |
Matlamatnya adalah untuk memilih item yang berada dalam kedua-dua atau semua kategori yang ditentukan sahaja; sebagai contoh, jika ID kategori 201 dan 202 disediakan, hanya item 1 dan 2 harus dikembalikan.
Penyelesaian:
1. Sertai Sendiri:
Kaedah ini melibatkan penyambungan jadual dengan dirinya sendiri pada lajur item_id:
<code class="sql">SELECT c1.item_id FROM item_category AS c1 INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id WHERE c1.category_id IN (201, 202)</code>
Pertanyaan ini mengembalikan set hasil gabungan dengan satu baris untuk setiap pasangan unik baris dalam jadual asal yang memenuhi kriteria category_id.
2. Kumpulan OLEH dan HAVING:
Pendekatan alternatif ialah menggunakan klausa GROUP BY dan HAVING:
<code class="sql">SELECT c.item_id, COUNT(*) AS cat_count FROM item_category AS c WHERE c.category_id IN (201, 202) GROUP BY c.item_id HAVING cat_count = 2</code>
Pertanyaan ini mengumpulkan baris mengikut item_id dan mengira kejadian ID kategori 201 dan 202 untuk setiap baris. Klausa HAVING menapis baris yang tidak mempunyai bilangan kejadian yang ditentukan (dalam kes ini, 2).
Atas ialah kandungan terperinci Bagaimana untuk Memilih Item dengan Pelbagai Nilai Lajur Khusus Merentasi Baris dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!