Mysql表连接,​​但如果第一个表有信息,则返回值,但第二个不是

时间:2015-01-18 04:47:39

标签: php mysql

我有以下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

我对所有使用游戏的用户都非常有效,但是当新用户进入系统时,由于没有玩游戏,他们不会在此查询中显示。

2 个答案:

答案 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。