Apabila melaksanakan pertanyaan yang menggunakan pengendali UNION, adalah penting untuk memastikan bahawa semua pernyataan SELECT individu yang terlibat mematuhi dua kriteria asas:
Memandangkan pertanyaan yang diberikan:
<code class="sql">SELECT * FROM friends LEFT JOIN users AS u1 ON users.uid = friends.fid1 LEFT JOIN users AS u2 ON users.uid = friends.fid2 WHERE (friends.fid1 = 1) AND (friends.fid2 > 1) UNION SELECT fid2 FROM friends WHERE (friends.fid2 = 1) AND (friends.fid1 < 1) ORDER BY RAND() LIMIT 6;
mesej ralat menunjukkan percanggahan dalam kiraan lajur antara dua pernyataan SELECT yang disertai oleh UNION. Khususnya, pernyataan SELECT pertama mengembalikan semua lajur daripada jadual yang terlibat, manakala yang kedua hanya mengambil lajur fid2.
Untuk menyelesaikan isu ini, pernyataan SELECT kedua harus diubah suai kepada padankan kiraan lajur pernyataan pertama. Pendekatan paling mudah ialah memasukkan semua lajur yang dikehendaki secara eksplisit:
<code class="sql"> SELECT f.*, u.* FROM FRIENDS AS f JOIN USERS AS u ON u.uid = f.fid2 WHERE f.fid1 = 1 AND f.fid2 > 1 UNION SELECT f.*, u.* FROM FRIENDS AS f JOIN USERS AS u ON u.uid = f.fid1 WHERE f.fid2 = 1 AND f.fid1 < 1 ORDER BY RAND() LIMIT 6;</code>
Sebagai alternatif, seseorang boleh menggunakan operator UNION ALL, yang membenarkan penyataan SELECT dengan jumlah lajur yang berbeza-beza. Walau bagaimanapun, lajur yang tidak sepadan akan diisi dengan nilai NULL, yang mungkin tidak diingini dalam semua kes.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Bilangan Lajur Berbeza dalam Penyata Pilihan\' Semasa Menggunakan UNION?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!