¿Por qué recibo un # 1222 – Las instrucciones SELECT utilizadas tienen un número diferente de columnas? Estoy tratando de cargar publicaciones en el muro de amigos de este usuario y de él mismo.
SELECT u.id AS pid, b2.id AS id, b2.message AS message, b2.date AS date FROM ( ( SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM wall_posts AS b JOIN Friends AS f ON f.id = b.pid WHERE f.buddy_id = '1' AND f.status = 'b' ORDER BY date DESC LIMIT 0, 10 ) UNION ( SELECT * FROM wall_posts WHERE pid = '1' ORDER BY date DESC LIMIT 0, 10 ) ORDER BY date DESC LIMIT 0, 10 ) AS b2 JOIN Users AS u ON b2.pid = u.id WHERE u.banned='0' AND u.email_activated='1' ORDER BY date DESC LIMIT 0, 10
La estructura de la tabla wall_posts tiene el mismo aspecto que id
La estructura de la tabla Friends se parece a Fid
id
buddy_id
invite_up_date
status
pid significa ID de perfil. No estoy realmente seguro de lo que está pasando.
La primera statement en la UNIÓN devuelve cuatro columnas:
SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM wall_posts AS b
El segundo devuelve seis , porque * se expande para include todas las columnas de WALL_POSTS
:
SELECT b.id, b.date, b.privacy, b.pid. b.uid message FROM wall_posts AS b
Los operadores UNION
y UNION ALL
requieren que:
Utilizar:
FROM ((SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM wall_posts AS b JOIN Friends AS f ON f.id = b.pid WHERE f.buddy_id = '1' AND f.status = 'b' ORDER BY date DESC LIMIT 0, 10) UNION (SELECT id, pid, message, date FROM wall_posts WHERE pid = '1' ORDER BY date DESC LIMIT 0, 10))
Está tomando la UNION
de una relación de 4 columnas ( id
, pid
, message
y date
) con una relación de 6 columnas ( *
= las 6 columnas de wall_posts
). SQL no te deja hacer eso.
( SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM wall_posts AS b JOIN Friends AS f ON f.id = b.pid WHERE f.buddy_id = '1' AND f.status = 'b' ORDER BY date DESC LIMIT 0, 10 ) UNION ( SELECT id, pid , message , date FROM wall_posts WHERE pid = '1' ORDER BY date DESC LIMIT 0, 10 )
Estabas seleccionando 4 en la primera consulta y 6 en la segunda, así que compáralos.