我有以下mysql查询
SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time
FROM UserNames, games_database
WHERE (UserNames.ID = games_database.UserNames_ID AND
UserNames.ID IN ({$Member_Ids_Sql}))
GROUP BY UserNames.ID
ORDER BY Total_Time DESC;
它会有效地获取玩家名称,召唤者名称和总播放时间。它通过使用表连接来完成此操作。作为一个表Usernames,包含用户ID,名称和召唤者名称。 Games_database表保存玩家玩过的每个游戏。
我想要做的是显示UserNames表中的用户信息,但尚未播放任何游戏。
额外信息: UserNames数据库包含 ID,Summoner_ID,Summoner_Name,Name
Games_database数据库包含
ID, Match_ID, my_Date, timePlayed, champion, win, Summoner_ID, UserNames_ID, Game_Type
我对所有使用游戏的用户都非常有效,但是当新用户进入系统时,由于没有玩游戏,他们不会在此查询中显示。
答案 0 :(得分:0)
您希望left join
找到不匹配的内容:
SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time
FROM UserNames LEFT JOIN
games_database
ON UserNames.ID = games_database.UserNames_ID
WHERE UserNames.ID IN ({$Member_Ids_Sql}) AND
games_database.UserNames_ID is null
GROUP BY UserNames.ID
ORDER BY Total_Time DESC;
注意:您应该学会始终使用明确的join
语法。
答案 1 :(得分:0)
这里需要的是左外连接。左外连接将返回第一个表中的所有结果(由您的位置切片),结果在第二个表中。如果没有匹配项,则会显示null。