Php Mysql表连接,但如果第一个表有信息,则返回值,但第二个表没有

Php Mysql表连接,但如果第一个表有信息,则返回值,但第二个表没有,php,mysql,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 ({$Me

我有以下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_数据库表保存玩家玩过的每一场游戏时

我想做的是显示用户名表中的用户信息,但是还没有玩过任何游戏

额外资料: 用户名数据库包含 身份证,召唤者身份证,召唤者姓名,姓名

游戏库数据库包含

ID, Match_ID, my_Date, timePlayed, champion, win, Summoner_ID, UserNames_ID, Game_Type

我让所有玩游戏的用户都能很好地使用它,但是当一个新用户进入系统时,由于没有玩游戏,他们不会显示在这个查询中

您想要一个
左连接
来查找不匹配项:

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
语法。

这里需要的是左外连接。左外部联接将返回第一个表中的所有结果(由where填充)以及第二个表中的结果。如果没有匹配项,将显示一个空值。

谢谢,尽管这种确切的语法不起作用,但我删除了games_数据库。UserNames_ID为空,它起作用了:)。我不完全确定LEFT Join是如何工作的,所以我开始研究它。谢谢你的帮助!谢谢,我是mysql的新手,以前从未听说过left-join命令:)left-join我们的left-outer-join几乎存在于所有类型的关系数据库中,下面是一个有用的链接,解释了不同类型的连接。听起来你有一个很酷的项目来开始探索数据库,祝你好运。请接受我们的一个答案,谢谢。