我知道stackoverflow是这个问题的记忆答案,但我的情况有点不同。 我在第二个表中有很多单元格,但SQL查询只是第一个。好的,不是所有查询,只有WHERE标记。
例如:
1表:
user_id = 1
user_id = 2
2表:
user_id = 1 | year = 2015 | rating = 55
user_id = 1 | year = 2016 | rating = 10
user_id = 2 | year = 2016 | rating = 50
user_id = 2 | year = 2016 | rating = 5
SQL查询:
$query = "SELECT c.*,v.upvotes
FROM ".PREFIX."_users c
LEFT JOIN (SELECT user_id,pol,vid_sporta,year_sport,category,SUM(rating) as upvotes
FROM ".PREFIX."_userrating
GROUP BY user_id
) v
ON c.user_id = v.user_id
WHERE year_sport='2015'
ORDER BY upvotes DESC";
这个查询只给我一个用户,因为 2015年第一次
我在SQL查询中需要一些循环:) 请帮助:)
答案 0 :(得分:1)
似乎可能会出现一些问题。
首先,
SELECT user_id,pol,vid_sporta,year_sport,category,SUM(rating) as upvotes
应该
SELECT user_id,SUM(rating) as upvotes
您只想将要返回的列包含在查询的其余部分中,并且任何不属于聚合函数的列也必须出现在GROUP BY
语句中。
其次,这就是为什么你只能得到1条记录就是你WHERE year_sport = '2015'
的位置。由于where条件位于外部查询中,因此将LEFT JOIN
视为INNER JOIN
,并限制year_sport
中userrating
的所有结果。将where语句移到内部查询中,您应该从upvotes
获取所有用户,但只能year_sport =2015
。
$query = "SELECT c.*,v.upvotes
FROM ".PREFIX."_users c
LEFT JOIN (SELECT user_id,SUM(rating) as upvotes
FROM ".PREFIX."_userrating
WHERE year_sport='2015'
GROUP BY user_id
) v
ON c.user_id = v.user_id
ORDER BY upvotes DESC";