Почему выходные данные не соответствуют столбцу в запросе Union All
Вот часть вывода
array(7) { ["type"]=> string(16) "комментарий к новому посту" ["book_id"]=> string(1) "1" ["name"]=> string(9) "независимо от" ["author_id"]=> string(4) "test" ["content"]=> string(19) "2011-07-16 03:20:01" ["create_time"]=> string(1) "3" ["id"]=> string(1) "1" }
И это часть моего запроса
SELECT 'bookcomment' AS type
,b.book_id
,b.name
,c.book_id
,c.author_id
,c.content
,c.create_time AS create_time
,u.id
,u.name
FROM tbl_book AS b,
tbl_book_comment AS c,
tbl_user AS u
WHERE u.id=c.author_id in (1,2) AND b.book_id=c.book_id
UNION ALL
SELECT 'new post comment' AS type
,po.post_id
,po.title
,pc.author_id
,pc.content
,pc.create_time AS create_time
,pc.post_id
,u.id
,u.name
FROM tbl_post as po,
tbl_post_comment as pc,
tbl_user as u
WHERE u.id=pc.author_id in(1,2) AND po.post_id=pc.post_id
UNION ALL
SELECT 'bookrating' AS type
,b.book_id as one
,b.name
,ra.book_id
,ra.user_id
,ra.rating
,ra.create_time AS create_time
,u.id
,u.name
FROM tbl_book AS b,
tbl_user_book_rating AS ra,
tbl_user AS u
WHERE u.id=ra.user_id in (1,2) AND b.book_id=ra.book_id
UNION ALL...
ORDER BY create_time DESC
Как показано в результате, данные, соответствующие "author_id", должны соответствовать "content", а "content" должно быть "create_time". Что не так с моим запросом?
1 ответ
Решение
Похоже, вы перепутали порядок столбцов во втором SELECT. Ваши столбцы такие (первый запрос слева, второй посередине, третий справа):
type type type
b.book_id po.post_id one
b.name po.title b.name
c.book_id pc.author_id ra.book_id
c.author_id pc.content ra.user_id
c.content create_time ra.rating
create_time pc.post_id create_time
u.id u.id u.id
u.name u.name u.name
Заказ перепутан в pc.author_id
судя по всему.