PILIH DISTINCT dengan Pelbagai Jadual dalam MySQL
Dalam pertanyaan MySQL, anda menggunakan gabungan tersirat antara minuman dan jadual drinks_photos tanpa sebarang syarat dalam klausa WHERE. Ini menghasilkan produk Cartesian, menghasilkan lima baris dengan nilai berulang untuk nama dan harga. Untuk menghapuskan pendua ini, anda boleh menggunakan klausa SELECT DISTINCT.
Walau bagaimanapun, jika anda ingin mengekalkan semua foto untuk setiap minuman, anda tidak boleh menggunakan SELECT DISTINCT sahaja kerana ia hanya mengembalikan baris yang berbeza. Sebaliknya, anda perlu menggunakan gabungan fungsi pengelompokan dan agregat.
Fungsi Pengumpulan dan Agregat
Pengumpulan mengagregatkan baris berdasarkan lajur atau lajur yang ditentukan. Dalam kes ini, anda ingin mengumpulkan hasil mengikut drinks_id untuk mendapatkan satu baris setiap minuman. Anda kemudian boleh menggunakan fungsi agregat untuk memilih nilai yang diingini bagi setiap hasil terkumpul.
Sebagai contoh, untuk mendapatkan semula foto pertama bagi setiap minuman, anda boleh menggunakan:
SELECT name, price, MIN(photo) AS photo FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
MIN () fungsi agregat mengembalikan nilai minimum lajur foto untuk setiap satu kumpulan.
GROUP_CONCAT
Sebagai alternatif, jika anda ingin menggabungkan semua foto untuk setiap minuman menjadi satu rentetan, anda boleh menggunakan fungsi GROUP_CONCAT() :
SELECT name, price, GROUP_CONCAT(photo, ',') AS photos FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
Walau bagaimanapun, ambil perhatian bahawa GROUP_CONCAT() bukan fungsi agregat SQL standard dan penggunaannya boleh berbeza-beza merentas pangkalan data yang berbeza.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Baris Pendua Apabila Menggunakan SELECT DISTINCT dengan Pelbagai Jadual dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!