Ralat: Percanggahan dalam Kiraan Lajur dalam Penyata SELECT
Apabila melaksanakan pertanyaan yang melibatkan berbilang pernyataan SELECT, seperti operasi UNION, adalah penting untuk memastikan bahawa setiap pernyataan mengandungi bilangan lajur yang sama. Kegagalan berbuat demikian akan mengakibatkan ralat "Ralat: Pernyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza".
Untuk menyelesaikan isu ini, pertanyaan perlu ditulis semula supaya setiap klausa SELECT mempunyai nombor yang sama lajur dengan jenis data yang serasi. Sebagai contoh, pertanyaan yang disediakan:
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;
mengalami ralat ini kerana SELECT pertama mengandungi 4 lajur ("", u1., u2.*), manakala SELECT kedua sahaja mengembalikan satu lajur ("fid2").
Tulisan semula yang lebih mudah yang mengekalkan fungsi yang dimaksudkan ialah:
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;
Dengan memastikan kedua-dua pernyataan SELECT mengembalikan bilangan lajur yang sama dengan padanan jenis data, pertanyaan boleh dilaksanakan tanpa menghadapi ralat kiraan lajur. Selain itu, ia menghapuskan cantuman luar yang tidak diperlukan, yang kelihatan berlebihan berdasarkan skema yang disediakan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'Ralat: Penyataan SELECT yang digunakan mempunyai bilangan lajur yang berbeza\' dalam Operasi UNION?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!