sql UNION прерывает запрос - PullRequest
       22

sql UNION прерывает запрос

0 голосов
/ 08 марта 2012

Запрос:

            (
                SELECT
                    upd.uid,
                    upd.update_id,
                    upd.update,
                    upd.date,
                    upd.type,
                    upd.total_likes,
                    upd.total_comments,
                    upd.deleted,
                    usr.username AS `username`,
                    usr.profile_picture AS `profile_picture`
                    ,(
                        SELECT
                            COUNT(lik.id)
                        FROM
                            likes as lik
                        WHERE
                            upd.update_id = lik.item_id
                            AND
                            lik.uid = 118697835834
                            AND lik.type=0
                    ) as liked_update,
                    (
                        SELECT
                            COUNT(fav.id)
                        FROM
                            favorites as fav
                        WHERE
                            upd.update_id = fav.item_id
                            AND
                            fav.uid = 118697835834
                            AND fav.type=0
                    ) as favorited_update

                FROM 
                    updates AS upd
                    LEFT JOIN 
                        users AS usr
                            ON upd.uid = usr.uid
                WHERE
                    upd.deleted=0
                  AND
                    (
                        upd.uid=118697835834
                           OR EXISTS
                          (
                              SELECT *
                            FROM
                                subscribers AS sub
                            WHERE
                                upd.uid = sub.suid
                                  AND sub.uid = 118697835834
                          )
                    )

            )
            UNION
            (
                SELECT
                    topic.uid,
                    topic.tid,
                    topic.title,
                    topic.body,
                    topic.total_likes,
                    topic.total_replies,
                    topic.views,
                    topic.date,
                    usr.username AS `username`,
                    usr.profile_picture AS `profile_picture`
                    ,(
                        SELECT
                            COUNT(lik.id)
                        FROM
                            likes as lik
                        WHERE
                            topic.update_id = lik.item_id
                            AND
                            lik.uid = 118697835834
                            AND lik.type=1
                    ) as liked_update,
                    (
                        SELECT
                            COUNT(fav.id)
                        FROM
                            favorites as fav
                        WHERE
                            topic.update_id = fav.item_id
                            AND
                            fav.uid = 118697835834
                            AND fav.type=1
                    ) as favorited_update

                FROM 
                    topics AS topic
                    LEFT JOIN 
                        users AS usr
                            ON topic.uid = usr.uid
                WHERE
                    topic.deleted=0
                  AND
                    (
                        topic.uid=118697835834
                           OR EXISTS
                          (
                              SELECT *
                            FROM
                                subscribers AS sub
                            WHERE
                                topic.uid = sub.suid
                                  AND sub.uid = 118697835834
                          )
                    )

            )
            ORDER BY date DESC

Я добавил UNION ( SELECT ), запрос загружается вечно и, наконец, он прекращает возвращать blank page ...

, удаляя UNION ( SELECT )отлично работает ...

Ответы [ 2 ]

1 голос
/ 08 марта 2012

ОК, после всех комментариев, скажите, пожалуйста, какие изменения вы внесли, чтобы скрипт работал.

В свете вашего комментария о том, что данные из двух таблиц находятся в одинаковых столбцах, это потому, что вы сказали движку сделать это с помощью UNION. Если вы хотите, чтобы они были в отдельных столбцах, вам нужно поместить Nulls между:

SELECT
    upd.uid,
    upd.update_id,
    upd.update,
    upd.date,
    upd.type,
    upd.total_likes,
    upd.total_comments,
    upd.deleted,
    null AS `topicuid`,
    null AS `topictid`,
    null AS `topictitle`,
    null AS `topicbody`,
    null AS `topictotal_likes`,
    null AS `topictotal_replies`,
    null AS `topicviews`,
    null AS `topicdate`,
    usr.username AS `username`,
    usr.profile_picture AS `profile_picture`,
    (SELECT COUNT(lik.id) FROM likes as lik WHERE upd.update_id = lik.item_id AND lik.uid = 118697835834 AND lik.type=0) as liked_update,
    (SELECT COUNT(fav.id) FROM favorites as fav WHERE upd.update_id = fav.item_id AND fav.uid = 118697835834 AND fav.type=0) as favorited_update
FROM
    ......
UNION ALL
SELECT
    null AS `upd.uid`,
    null AS `upd.update_id`,
    null AS `upd.update`,
    null AS `upd.date`,
    null AS `upd.type`,
    null AS `upd.total_likes`,
    null AS `upd.total_comments`,
    null AS `upd.deleted`,
    topic.uid,
    topic.tid,
    topic.title,
    topic.body,
    topic.total_likes,
    topic.total_replies,
    topic.views,
    topic.date,
    usr.username AS `username`,
    usr.profile_picture AS `profile_picture`,
    (SELECT COUNT(lik.id) FROM likes as lik WHERE topic.update_id = lik.item_id AND lik.uid = 118697835834 AND lik.type=1) as liked_update,
    (SELECT COUNT(fav.id) FROM favorites as fav WHERE topic.update_id = fav.item_id AND fav.uid = 118697835834 AND fav.type=1) as favorited_update

Возможно, вам придется проделать немного больше работы с именами столбцов, но вы должны туда добраться. Я не голосовал за вопрос, но, вероятно, должен. Вы должны прочитать о том, что оператор UNION фактически делает с двумя или более запросами.

0 голосов
/ 08 марта 2012

Когда вы используете UNION, у вас должны быть точно такие же результаты "формат столбца, имена, ...", поэтому в начале запроса upd.total_comments вы должны иметь значение total_comments, а внизу topic.total_replies как total_repliesэто разные имена.надеюсь, вы понимаете, что я пытаюсь объяснить, если не посетить здесь , где это объясняет лучше.

...