Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Data Minuman Unik daripada Berbilang Jadual MySQL dengan Foto Pendua?
Memilih Hasil Unik daripada Berbilang Jadual dalam MySQL
Dalam MySQL, apabila melakukan operasi JOIN antara berbilang jadual, mungkin terdapat baris pendua dalam set keputusan. Ini sering berlaku apabila memilih data daripada jadual dengan berbilang baris yang berkaitan dengan satu entri dalam jadual lain.
Pernyataan Masalah
Pertimbangkan contoh berikut:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id;
Pertanyaan ini cuba mendapatkan semula nama, harga dan foto untuk setiap minuman daripada jadual minuman dan minuman_foto. Walau bagaimanapun, ia menghasilkan baris pendua untuk setiap minuman kerana terdapat berbilang foto yang dikaitkan dengan minuman tunggal.
Penyelesaian
Untuk menghapuskan pendua dan memastikan setiap minuman muncul sahaja sekali, kita perlu menggabungkan mekanisme pengelompokan. MySQL menyediakan beberapa cara untuk mencapai ini:
Menggunakan Pengumpulan dan Pengagregatan
Satu pilihan ialah menggunakan klausa GROUP BY untuk mengumpulkan hasil berdasarkan minuman unik dan memohon fungsi agregat untuk memilih nilai lajur yang dikehendaki:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id;
Dalam pertanyaan ini, drinks_id bertindak sebagai lajur pengelompokan, memastikan bahawa hanya minuman yang berbeza disertakan dalam keputusan. Selain itu, memandangkan terdapat berbilang foto untuk setiap minuman, kami perlu menentukan foto yang hendak dipaparkan. Dalam contoh ini, foto digunakan, tetapi ia boleh digantikan dengan MIN(foto) atau MAX(foto) untuk mendapatkan semula foto pertama atau terakhir dalam susunan menaik atau menurun, masing-masing.
Menggunakan GROUP_CONCAT
Sebagai alternatif, MySQL menyediakan fungsi GROUP_CONCAT, yang boleh digunakan untuk menggabungkan berbilang nilai ke dalam rentetan tunggal:
SELECT name, price, GROUP_CONCAT(photo) FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id;
Pertanyaan ini akan mendapatkan semula nama, harga dan senarai yang dipisahkan koma bagi semua foto yang dikaitkan dengan setiap minuman.
Nota:
Adalah penting untuk ambil perhatian bahawa penggunaan GROUP_CONCAT boleh menyebabkan overhed prestasi jika nilai yang digabungkan adalah besar. Selain itu, berhati-hati terhadap aksara pemisah yang mungkin terdapat dalam nilai itu sendiri.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Data Minuman Unik daripada Berbilang Jadual MySQL dengan Foto Pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!