如何通过其他表值来命令sql查询

时间:2016-06-17 16:58:27

标签: mysql sql

我知道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查询中需要一些循环:) 请帮助:)

1 个答案:

答案 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_sportuserrating的所有结果。将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";