Tidak Dapat Memilih Semua Medan dengan DISTINCT dalam Pertanyaan MySQL
Apabila cuba menghapuskan baris pendua menggunakan kata kunci DISTINCT, pengguna mungkin menghadapi batasan dalam memilih semua medan dalam pertanyaan MySQL mereka. Artikel ini menangani isu ini dan menyediakan penyelesaian.
Latar Belakang
Kata kunci DISTINCT mengenal pasti dan mengembalikan hanya baris unik dalam set hasil, berdasarkan lajur yang ditentukan ). Walau bagaimanapun, ia boleh membawa kepada ralat apabila digabungkan dengan pernyataan pilih-semua (*).
Pertimbangkan pertanyaan berikut, yang hanya memilih lajur ticket_id dalam jadual temp_tickets dan memesannya melalui ticket_id:
mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Pertanyaan ini akan berjaya dilaksanakan dan mengembalikan nilai ticket_id yang berbeza. Walau bagaimanapun, pertanyaan berikut, yang cuba memilih semua medan dan menggunakan DISTINCT:
mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Akan mengakibatkan ralat. Ini kerana DISTINCT hanya boleh digunakan pada satu lajur.
Penyelesaian
Untuk memilih semua medan dan menggunakan DISTINCT untuk menghapuskan pendua, ubah suai pertanyaan seperti berikut:
SELECT ticket_id, <other_field>, <other_field> FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id
Dalam pertanyaan ini, klausa GROUP BY digunakan bersama DISTINCT untuk mengumpulkan hasil mengikut lajur ticket_id. Untuk setiap ticket_id unik, hanya satu baris akan dikembalikan, mengandungi nilai terkini untuk medan yang ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Semua Medan dengan DISTINCT dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!