Lors de l'exécution d'une requête qui utilise l'opérateur UNION, il est impératif de s'assurer que toutes les instructions SELECT individuelles impliquées respectent deux critères fondamentaux :
Considérant la requête fournie :
<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;
le Le message d'erreur indique une différence dans le nombre de colonnes entre les deux instructions SELECT jointes par UNION. Plus précisément, la première instruction SELECT renvoie toutes les colonnes des tables impliquées, tandis que la seconde récupère uniquement la colonne fid2.
Pour résoudre ce problème, la deuxième instruction SELECT doit être modifiée en correspondre au nombre de colonnes de la première instruction. L'approche la plus simple consiste à inclure explicitement toutes les colonnes souhaitées :
<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>
Vous pouvez également utiliser l'opérateur UNION ALL, qui autorise les instructions SELECT avec un nombre de colonnes variable. Cependant, les colonnes qui ne correspondent pas seront remplies de valeurs NULL, ce qui n'est peut-être pas souhaitable dans tous les cas.
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!