UNIONES (UNION
y UNION ALL
) requieren que todas las consultas que se realicen en UNION tengan:
- El mismo número de columnas en la cláusula SELECT
- El tipo de datos de la columna debe coincidir en cada posición
Su consulta tiene:
SELECT f.*, u1.*, u2.* ...
UNION
SELECT fid2 FROM friends
La reescritura más fácil que tengo es:
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;
Has LEFT JOIN a los USERS
tabla dos veces, pero no parece estar usando la información.