-2

私は2つのテーブルを持っています

ユーザー

ここに画像の説明を入力

ゲーム

ここに画像の説明を入力

私の要件

[
 {
   users:{
     id: "1",
     user: "user1",
     games:[
       {
         id : "1",
         game_names : "football"
       }
       {
         id : "2",
         game_names : "cricket"
       }
       {
         id : "3",
         game_names : "athletics"
       }
       {
         id : "4",
         game_names : "badminton"
       }
     ]
   }
   users: {
     id : "2",
     user : "user2",
     games :[
       {
         id : "3",
         game_names : "athletics"
       }
       {
         id : "4",
         game_names : "badminton"
       }
       {
         id: "5",
         game_names : "basketball"
       }
     ]
   }
 }
]

今使っているもの

<?php 
$result = mysql_query("SELECT *,games.game_names as games
FROM users 
LEFT JOIN games ON users.games=games.id 
GROUP BY users.id") or die(mysql_error());

while($user = mysql_fetch_array($result, MYSQL_ASSOC)) {        
    $users[] = array(
                'user'=>array(
                    'id' => $user['id'],
                    'user' => $user['user'],                        
                    'games' =>  $user['games']          
                )
    );  
} 
$output = json_encode(array('statics' => $users));
echo $output;
    ?>

しかし、私は得ています

{
 statics: [
   {
    users: {
       id: "1",
       user: "user1",
       games: "1,2,3,4"
    }
   },
   {
    users: {
     id: "2",
     user: "user2",
     games: "3,4,5"
   }
  }
 ]
}

しかし、私はセカンドアレイゲームを手に入れることができません

私のコードphpコードをどのように変更する必要がありますか.

4

3 に答える 3

1

このクエリを完全に使用しました

SELECT users.*,games.game_names,games.id as games_id
FROM users 
LEFT JOIN games ON FIND_IN_SET(games.id,users.games)

ここに画像の説明を入力

要件に応じてphpコードを設定します

于 2013-09-26T06:45:49.157 に答える
1

まあ、私が推測するクエリで直接行うことはできません。これの代わりに、モデルを正規化する必要があります。

users
user_id
user_name

users_games
user_id
game_id

games
game_id
game_name

あなたの例では、データは次のようになります。

users:
1,user1
2,user2

users_games:
1,1
1,2
1,3
1,4
2,3
2,4
2,5

games:
1,game1
2,game2
3,game3
4,game4
5,game5

正規化した後、このクエリを実行すると、必要なものが正確に得られます

SELECT users.user_id, users.user_name, GROUP_CONCAT(games.game_names)
FROM users INNER JOIN users_games ON users.user_id=users_games.user_id
INNER JOIN games ON users_games.game_id = games.game_id GROUP BY users.user_id

クエリは試していませんが、動作するはずです

編集済み

@ShaktiPatel によると、find_in_set を group_concat で使用できます (関数についてはわかりませんFIND_IN_SET)。

SELECT users.*,GROUP_CONCAT(games.game_names)
FROM users 
INNER JOIN games ON FIND_IN_SET(games.id,users.games) GROUP BY users.id
于 2013-09-26T06:49:23.350 に答える
0

左結合の代わりに内部結合を使用する必要があります

$result = mysql_query("SELECT *
FROM users 
INNER JOIN games ON users.games=games.id 
GROUP BY users.id") or die(mysql_error());
于 2013-09-26T06:28:50.780 に答える