Почему выходные данные не соответствуют столбцу в запросе 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 судя по всему.

Другие вопросы по тегам