Why output data are not corresponding to it's column in Union All query
Here's a piece of the output
array(7) { ["type"]=> string(16) "new post comment" ["book_id"]开发者_StackOverflow中文版=> string(1) "1" ["name"]=> string(9) "whatever" ["author_id"]=> string(4) "test" ["content"]=> string(19) "2011-07-16 03:20:01" ["create_time"]=> string(1) "3" ["id"]=> string(1) "1" }
And this is part of my query
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
As the result shown,data correspond to 'author_id' should have correspond to 'content' and 'content' should be 'create_time'. What's wrong with my query?
Looks like you've mixed up the order of the columns in the second SELECT. Your columns are like this (first query on the left, second in the middle, third on right):
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
The order gets mixed up at pc.author_id
by the look of it.
精彩评论