Erreur : écarts dans le nombre de colonnes dans les instructions SELECT
Lors de l'exécution d'une requête impliquant plusieurs instructions SELECT, comme une opération UNION, il est impératif pour garantir que chaque instruction contient exactement le même nombre de colonnes. Si vous ne le faites pas, l'erreur « Erreur : les instructions SELECT utilisées ont un nombre différent de colonnes ».
Pour résoudre ce problème, la requête doit être réécrite de telle sorte que chaque clause SELECT ait un numéro identique. de colonnes avec des types de données compatibles. Par exemple, la requête fournie :
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;
souffre de cette erreur car le premier SELECT contient 4 colonnes ("", u1., u2.*), tandis que le second SELECT uniquement renvoie une seule colonne ("fid2").
Une réécriture plus simple qui préserve la fonctionnalité prévue est :
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;
En garantissant que les deux instructions SELECT renvoient le même nombre de colonnes avec des correspondances types de données, la requête peut être exécutée sans rencontrer l’erreur de nombre de colonnes. De plus, il élimine les jointures externes inutiles, qui semblent redondantes d'après le schéma fourni.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!