我甚至不确定如何命名这篇文章,因为我不确切知道如何提问。
我有三张桌子。一个是用户,一个是食物,另一个是食物的用户评价,如此(简化示例):
Foods
id name type
---------------------
1 Apple fruit
2 Banana fruit
3 Steak meat
Users
id username
-----------------
1 Mark
2 Harrison
3 Carrie
Scores (fid = food id, uid = user id)
fid uid score
---------------------
1 1 3
1 2 5
2 1 2
3 2 3
现在,我有这个查询,它完美地运作:
SELECT fn.name as Food, ROUND(AVG(s.score),1) AS AvgScore FROM Foods fn LEFT JOIN Scores s ON fn.id = s.fid GROUP BY fn.id ORDER BY fn.name ASC
正如您所知,它列出了Foods的所有名称,包括所有用户对食物的评级的平均值。
我还想添加唯一用户自己的分数。 (假设当Mark登录时,他的uid设置在会话变量或其他任何内容中)
如果您以Mark身份登录,我需要以下输出:
Food AvgScore Your Score
Apple 4 3
我已经多次尝试实现这一目标,但我找不到解决方案。我已经了解到,如果你有一个问题,很可能是其他人在你做之前已经问过它,但我不太清楚如何表达这个问题,所以在google搜索时我没有得到答案。非常感谢正确方向的指针。
答案 0 :(得分:0)
您可以尝试case
:
SELECT fn.name as Food,
ROUND(AVG(s.score),1) AS AvgScore,
sum(case s.uid = $uid when s.score else 0 end) as YourScore
FROM Foods fn
LEFT JOIN Scores s ON fn.id = s.fid
GROUP BY fn.id
ORDER BY fn.name ASC
$uid
当然可变。