Считается с несколькими объединениями - PullRequest
0 голосов
/ 26 января 2011

У меня есть 3 таблицы настройки (предметы, отзывы, рейтинги).Я хочу подсчитать общее количество оценок и общее количество отзывов для каждого элемента, затем объединить их для общего количества взаимодействий, а затем вывести главные элементы на основе взаимодействий.

Я борюсь с запросом aбит.

SELECT item.id, count(reviews.review_id) AS total_reviews, count(ratings.rating_id) AS total_ratings, total_reviews+total_ratings AS total_interactions FROM items LEFT OUTER JOIN reviews ON reviews.item_id=item.id LEFT OUTER JOIN ratings ON rating.item_id=item.id GROUP BY item.id ORDER BY total_interactions DESC LIMIT 0,1

Ответы [ 2 ]

2 голосов
/ 26 января 2011
SELECT  *, total_reviews + total_ratings AS total_interactions
FROM    (
        SELECT  id,
                (
                SELECT  COUNT(*)
                FROM    reviews
                WHERE   item_id = i.id
                ) AS total_reviews,
                (
                SELECT  COUNT(*)
                FROM    ratings
                WHERE   item_id = i.id
                ) AS total_ratings
        FROM    items i
        ) q
ORDER BY
        total_interactions DESC
LIMIT 1
0 голосов
/ 26 января 2011

Я попытаюсь просто исправить ваш исходный запрос, вместо того, чтобы написать другой:

SELECT
    item.id,
    count(distinct reviews.review_id) AS total_reviews,
    count(distinct ratings.rating_id) AS total_ratings,
    count(distinct reviews.review_id) + count(distinct ratings.rating_id) AS total_interactions
FROM
    items
    LEFT OUTER JOIN reviews ON
        reviews.item_id = item.id
    LEFT OUTER JOIN ratings ON
        rating.item_id = item.id
GROUP BY
    item.id
ORDER BY
    total_interactions DESC
LIMIT 0, 1

Ключ здесь COUNT(DISTINCT field).Кстати, вероятно, вам просто нужно это значение total_ratings - просто попробуйте и посмотрите, что вы получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...