从两个不同的mysql表中获取某个查询结果

时间:2017-02-07 12:35:45

标签: mysql sql

我遇到以下问题:

我尝试实现一个成就系统。我有两张桌子。表1包含achievement_id和achievement_info。表2包含指向用户的链接,即achievement_id和player_id,以便您可以判断哪个用户已完成某些操作。

我试图编写一个方法来返回所有成就,但另外还有一个标志,告诉我某个用户是否已经获得此行。 例如:getPlayerAchievements(playerid) - >返回带有id,info和bool标志的成就列表,无论用户是否已实现它。

表1:

achievement_id|achievement_info  
1             |info1  
2             |info2  
3             |info3  

表2:

achievement_id|player_id;  
1             |15  
3             |15  

我需要输入player_id" 15":

achievement_id|achievement_info|(bool)achieved  
1             |info1           |true  
2             |info2           |false  
3             |info3           |true  

我已经有成绩课,所以我只需要填写我的数据。

我总是可以使用两个单独的SQL查询来实现这一点,但我想也许有一种方法可以简化它,因为我使用php来获取我的数据并且不想在一个PHP脚本中使用两个连接和查询

2 个答案:

答案 0 :(得分:0)

您想从Achiemets表中选择所有记录并显示它们。这很简单:-)对于你想要显示的每个记录,玩家1234是否已经达到了这个成就。您可以使用EXISTS子句执行此操作:

select 
  achievement_id, 
  achievement_info,
  exists 
  (
    select * 
    from players p 
    where p.player_id = 1234 
      and p.achievement_id = a.achievement_id
  ) as achieved
from achievements a;

甚至更简单IN

select 
  achievement_id, 
  achievement_info,
  achievement_id in (select achievement_id from players where player_id = 1234) as achieved
from achievements;

答案 1 :(得分:0)

您可以使用left join从用户的成就表中获取完整的成就列表和匹配记录:

select t1.achievement_id, t1.achievement_info, (t2.achievement_id is null) as achieved
from table1 t1
left join table2 t2 on t1.achievement_id=t2.achievement_id and t2.player_id=15