2017-02-07 12 views
-3

Im次の問題があります。2つの異なるmysqlテーブルから特定のクエリ結果を取得

私は達成システムを実装しようとしています。私は2つのテーブルを持っています。表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 

私はまだ達成クラスを持っています私はちょうど私のデータでそれらを埋める必要があります。

私はいつもそれを達成するために2つの別々のSQLクエリを使用することができましたが、私はデータを取得するためにPHPを使用し、1つのPHPスクリプトで2つの接続とクエリを必要としないので、

+3

質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

0

あなたはachievemetsテーブルからすべてのレコードを選択して表示します。それは簡単な部分です:-)すべてのレコードについて、プレーヤー1234がこの達成を達成したかどうかを示したいとします。 IN

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; 

あるいは単純:あなたはEXISTS句でこれを行うことができます

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

答えをありがとう!それは仕事をした! – DrSkyer

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 
+0

...テーブル内にユーザーあたり複数のアチーブメントはありません(つまり、achievement_id + player_idはアチーブメントテーブル内で一意です)。それ以外の場合は、重複を取り除く必要があります。 –

関連する問題