У меня есть запрос с соединениями, которые были увеличивали результаты суммы (давая неправильные результаты). < /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
Запрос теперь дает правильные результаты.
это хороший подход?
У меня есть запрос с соединениями, которые были увеличивали результаты суммы (давая неправильные результаты). < /p> Моя первоначальная попытка была: < /p> [code]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 [/code] Запрос теперь дает правильные результаты. это хороший подход?