【发布时间】:2018-09-20 14:25:40
【问题描述】:
我正在尝试为特定用户(此代码中的#1)收集“关注者”。
我正在从followers 中进行主要选择,因为following 列将拥有用户#1,followers.userid 将拥有执行以下操作的人的用户ID。
接下来,我尝试从experiences 中获取具有关注者用户 ID 的记录计数(该关注者有多少经验?)
接下来,关注者将对每个体验进行评分(1-5 星),我想将这些评分(experiences.stars)相加,以获得所有体验的平均评分。
最后,我想从 users 表中加入关注者用户记录。
我应该以 userid、jobs、stars、*来自用户
SELECT * FROM followers AS F
RIGHT JOIN
(SELECT count(id) FROM experiences AS M WHERE M.userid = F.userid) AS jobs
RIGHT JOIN
(SELECT sum(stars) FROM experiences AS S WHERE S.userid = F.userid) AS stars
RIGHT JOIN
users AS U ON U.userid = F.userid
WHERE F.following = 1 /* #1 = the user # I want the follwers of/for */
我也试过了:
SELECT * FROM followers AS F,
(SELECT count(id) FROM experiences AS M WHERE M.userid = F.userid) AS jobs,
(SELECT sum(stars) FROM experiences AS S WHERE S.userid = F.userid) AS stars
RIGHT JOIN
users AS U ON U.userid = F.userid
WHERE F.following = 1 /* #1 = the user # I want the follwers of/for */
在 cPanel 中,我收到一条错误消息,提示我在两个语句中的 WHERE F.userid 处都有语法错误。
A) 我错过了什么,B) 有没有更好的方法来做到这一点?
【问题讨论】:
-
您使用
RIGHT JOIN的任何特殊原因?本质上没有错;我只是很少看到它在组合良好的查询中使用。 -
没有真正的原因。我编辑了我的问题并显示了我尝试过的另一个查询。结果相同。除了 F.userid 在 SELECT 中带有 COUNT()
-
混合“逗号连接”和显式连接也不是一个好主意;逗号连接通常被认为是过时的(充其量),因为它们已经失宠了几十年。
标签: mysql count right-join