请帮助我。 我有3张桌子:
用户 id评级
帖子 id_post评级id_author
照片 id_photo评级id_user
需要根据以下公式查询更新用户的评分:avg(用户发布的评分)+ avg(用户照片评分)。 尝试过此操作,但仅在用户拥有以及帖子和照片时才有效。如果用户有照片,但没有帖子,则评分变为0:
UPDATE users U
inner JOIN
(select id_user, avg(rating) as avgrating
from photos P
group by id_user
) P
on U.id = P.id_user
inner JOIN
(select author_id, avg(rating) as avgrating_posts
from posts PS
group by author_id
) PS
on U.id = PS.author_id
SET
U.rating = (
P.avgrating +
PS.avgrating_posts
)
UPDATE users SET
rating = (
( SELECT AVG(rating) FROM photos
WHERE photos.id_user = users.id AND deleted = 0 AND hidden = 0 AND date_published > 0 ) +
( SELECT AVG(rating) FROM posts
WHERE posts.author_id = users.id AND published_at > 0
))
答案 0 :(得分:0)
对内部查询使用left
连接,因此,如果找不到与用户相关的记录,则将返回空值。
UPDATE users U
LEFT JOIN (SELECT author_id,
AVG(rating) AS avgrating_posts
FROM posts PS
GROUP BY author_id) PS
ON U.id = PS.author_id
LEFT JOIN (SELECT id_user,
AVG(rating) AS avgrating
FROM photos P
GROUP BY id_user) P
ON U.id = P.id_user
SET U.rating = COALESCE(P.avgrating,0) + COALESCE(PS.avgrating_posts,0)