Как передать переменную в mysql JOIN (SELECT) подзапрос - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно подсчитать голоса за каждый комментарий, и возникла проблема с этим запросом.Запрос занимает около 3 секунд для комментариев 1 M и комментариев 3 M

Как я понимаю, проблема в том, что mysql подсчитывает все голоса за все комментарии

SELECT com.*, cv.UC_Vote, cv.UC_Vote_Neg, cv.UC_Vote_Pos
    FROM Comments AS com
        LEFT JOIN (
            SELECT SUM(Vote) AS UC_Vote, SUM(IF(Vote < 0, Vote, 0)) AS UC_Vote_Neg, SUM(IF(Vote > 0, Vote, 0)) AS UC_Vote_Pos, UC_Code FROM CommentsVote
            GROUP BY UC_Code
        ) AS cv ON cv.UC_Code = com.UC_Code
    WHERE
       com.Blo_Code = $blocode AND com.UC_Status = 1

Так как передать UC_Code в подзапрос, какэто?

LEFT JOIN (
        SELECT SUM(Vote) AS UC_Vote, SUM(IF(Vote < 0, Vote, 0)) AS UC_Vote_Neg, SUM(IF(Vote > 0, Vote, 0)) AS UC_Vote_Pos, UC_Code FROM CommentsVote
        **WHERE cv.UC_Code = com.UC_Code**
        GROUP BY UC_Code
    ) AS cv ON cv.UC_Code = com.UC_Code

1 Ответ

0 голосов
/ 28 ноября 2018

Я понял!Делай как это

SELECT com.*, UNIX_TIMESTAMP(com.UC_Time) AS UC_UnixTime, com.UC_Code AS CommentId, com.UC_Parent AS ParentId, cc.UC_Complain,
                              (SELECT SUM(Vote) FROM CommentsVote WHERE UC_Code = com.UC_Code GROUP BY UC_Code) AS UC_Vote,
                              (SELECT SUM(IF(Vote < 0, Vote, 0)) FROM CommentsVote WHERE UC_Code = com.UC_Code GROUP BY UC_Code) AS UC_Vote_Neg,
                              (SELECT SUM(IF(Vote > 0, Vote, 0)) FROM CommentsVote WHERE UC_Code = com.UC_Code GROUP BY UC_Code) AS UC_Vote_Pos
                              FROM Comments AS com
                                LEFT JOIN (
                                  SELECT COUNT(us_id) AS UC_Complain, UC_Code FROM CommentsComplain
                                  GROUP BY UC_Code
                                ) AS cc ON cc.UC_Code = com.UC_Code
                              WHERE
                                com.Blo_Code = 473626 AND com.UC_Status = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...