Присоединяйтесь к запросу суммы на подпрограмму [закрыто]MySql

Форум по Mysql
Ответить
Anonymous
 Присоединяйтесь к запросу суммы на подпрограмму [закрыто]

Сообщение Anonymous »

У меня есть запрос с соединениями, которые были увеличивали результаты суммы (давая неправильные результаты). < /p>
Моя первоначальная попытка была: < /p>

Код: Выделить всё

SELECT mt.id, mt.title, mt.options,
COUNT(DISTINCT ct.id) as comment_count,
SUM(lt.vote = 1) AS like_count,
SUM(lt.vote = -1) AS dislike_count,
MAX(CASE WHEN lt.user_id = %d THEN 1 ELSE 0 END) AS user_liked,
COUNT(DISTINCT ft.id) as favorite_count,
MAX(CASE WHEN ft.user_id = %d THEN 1 ELSE 0 END) AS user_favorite,
SUM(DISTINCT st.c_play) AS c_play
FROM $media_table mt
LEFT JOIN $comments_table ct ON ct.media_id = mt.id
LEFT JOIN $like_table lt ON lt.media_id = mt.id
LEFT JOIN $favorite_table ft ON ft.media_id = mt.id
LEFT JOIN $statistics_table st on st.media_id = mt.id
WHERE mt.playlist_id = %d
GROUP BY mt.id
ORDER BY $sortOrder $sortDirection
< /code>
Эта часть давала неправильные результаты: < /p>
SUM(lt.vote = 1) AS like_count,
SUM(lt.vote = -1) AS dislike_count,
< /code>
Так что я перемещаю как_Table запросы на подраздел: < /p>
SELECT mt.id, mt.title, mt.options, lt.like_count, lt.dislike_count, lt.user_liked,
COUNT(DISTINCT ct.id) as comment_count,
COUNT(DISTINCT ft.id) as favorite_count,
MAX(CASE WHEN ft.user_id = %d THEN 1 ELSE 0 END) AS user_favorite,
SUM(DISTINCT st.c_play) AS c_play
FROM $media_table mt
LEFT JOIN $comments_table ct ON ct.media_id = mt.id
LEFT JOIN (
SELECT media_id, SUM(vote = 1) AS like_count,
SUM(vote = -1) AS dislike_count,
MAX(CASE WHEN user_id = %d THEN 1 ELSE 0 END) AS user_liked
FROM $like_table
) AS lt ON lt.media_id = mt.id
LEFT JOIN $favorite_table ft ON ft.media_id = mt.id
LEFT JOIN $statistics_table st on st.media_id = mt.id
WHERE mt.playlist_id = %d
GROUP BY mt.id
ORDER BY $sortOrder $sortDirection
Запрос теперь дает правильные результаты.
это хороший подход?

Подробнее здесь: https://stackoverflow.com/questions/796 ... o-subquery
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»