cloudroam
2025-06-11 fb514e661e644bc40dba3d2413a64ff5e86bf6be
src/main/resources/mapper/film/FilmWorksMapper.xml
@@ -6,15 +6,51 @@
        SELECT
        t.*,
        c.name AS  nickname,
        c.cover AS  avatar
        c.cover AS  avatar,
        COALESCE(l.like_count, 0) AS vo_like_count,
        COALESCE(com.comment_count, 0) AS vo_comment_count,
        COALESCE(col.collect_count, 0) AS vo_collect_count,
        CASE WHEN l_user.status = 1 THEN 1 ELSE 0 END AS liked,
        CASE WHEN col_user.status = 1 THEN 1 ELSE 0 END AS collected
        FROM
        film_works t
        LEFT JOIN
        t_customer_info c
        ON
        t.create_by = c.user_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS like_count
        FROM film_likes
        WHERE status = 1
        GROUP BY film_id
        ) l ON t.id = l.film_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS comment_count
        FROM film_comments
        WHERE state = 1
        GROUP BY film_id
        ) com ON t.id = com.film_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS collect_count
        FROM film_collects
        WHERE status = 1
        GROUP BY film_id
        ) col ON t.id = col.film_id
        LEFT JOIN (
        SELECT film_id, status
        FROM film_likes
        WHERE create_by = #{dto.userId}
        ) l_user ON t.id = l_user.film_id
        LEFT JOIN (
        SELECT film_id, status
        FROM film_collects
        WHERE create_by = #{dto.userId}
        ) col_user ON t.id = col_user.film_id
        WHERE
        t.deleted = 0
        <if test="dto.id != null and dto.id != ''">
            AND t.id  = #{dto.id}
        </if>
        <if test="dto.nameCn != null and dto.nameCn != ''">
            AND t.name_cn LIKE CONCAT('%', #{dto.nameCn}, '%')
        </if>
@@ -48,4 +84,58 @@
        t.update_time DESC
    </select>
    <select id="selectInfoById" resultType="com.mzl.flower.dto.response.film.FilmWorksVO">
        SELECT
        t.*,
        c.name AS  nickname,
        c.cover AS  avatar,
        COALESCE(l.like_count, 0) AS vo_like_count,
        COALESCE(com.comment_count, 0) AS vo_comment_count,
        COALESCE(col.collect_count, 0) AS vo_collect_count,
        CASE WHEN l_user.status = 1 THEN 1 ELSE 0 END AS liked,
        CASE WHEN col_user.status = 1 THEN 1 ELSE 0 END AS collected
        FROM
        film_works t
        LEFT JOIN
        t_customer_info c
        ON
        t.create_by = c.user_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS like_count
        FROM film_likes
        WHERE status = 1
        GROUP BY film_id
        ) l ON t.id = l.film_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS comment_count
        FROM film_comments
        WHERE state = 1
        GROUP BY film_id
        ) com ON t.id = com.film_id
        LEFT JOIN (
        SELECT film_id, COUNT(*) AS collect_count
        FROM film_collects
        WHERE status = 1
        GROUP BY film_id
        ) col ON t.id = col.film_id
        LEFT JOIN (
        SELECT film_id, status
        FROM film_likes
        WHERE create_by = #{userId}
        ) l_user ON t.id = l_user.film_id
        LEFT JOIN (
        SELECT film_id, status
        FROM film_collects
        WHERE create_by = #{userId}
        ) col_user ON t.id = col_user.film_id
        WHERE
        t.deleted = 0
        <if test="id != null and id != ''">
            AND t.id  = #{id}
        </if>
        ORDER BY
        t.update_time DESC
    </select>
</mapper>