Php Mysql表连接,但如果第一个表有信息,则返回值,但第二个表没有
我有以下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
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几乎存在于所有类型的关系数据库中,下面是一个有用的链接,解释了不同类型的连接。听起来你有一个很酷的项目来开始探索数据库,祝你好运。请接受我们的一个答案,谢谢。