0

JSON 応答に問題があります。私の mysql データベースには、Users と Games の 2 つのテーブルがあります。1 人のユーザーからすべてのゲームを取得しようとすると、respons でそれらのゲームを取得しますが、* Users テーブルにあるさまざまなユーザーの数です。したがって、ID 8 のユーザーからすべてのゲームが必要な場合、たとえば 3 つのゲームが必要な場合、それらのゲームを取得しますが、私が持っているユニーク ユーザー数を 9 倍するとします。したがって、クエリは 27 ゲームを返します (9 * 3同じゲーム)。ここで私が間違っているのは何ですか。

 $pm_id = $_POST["pm_id"];
 $pm_pass = $_POST["pm_pass"];
 $pm_timestamp = $_POST["pm_timestamp"];

try {
     $dbconn = 'mysql:host=' . DBHOST . ';dbname=' . DBDATA;
     $db = new PDO($dbconn, DBUSER, DBPASS);
 } catch (PDOException $e) {
     echo 'Connection failed: ' . $e->getMessage();
 }

 $statement = $db->prepare('SELECT * FROM users WHERE user_id = :id AND password =      :pass');
 $statement->execute(array(':id' => $pm_id, ':pass' => $pm_pass));
 $statement->setFetchMode(PDO::FETCH_ASSOC);

 $row = $statement->fetch();
     if($row['timestamp'] == $pm_timestamp){
         #no sync necessary
         echo json_encode("no sync needed");
     }else{
         #start sync
         $games = array();
         $statement_getAllGames = $db->prepare('SELECT game.game_id, game.user_id,       game.name, game.buyin, game.result, game.startDate, game.endDate, game.location,      game.isTournament, game.participants, game.endposition, game.comment, game.blinds,      game.pause,
         game.visibility, users.timestamp FROM game, users WHERE game.user_id = :id AND    game.timestamp > :timestamp');
         $statement_getAllGames->execute(array(':id' => $pm_id, ':timestamp' =>   $pm_timestamp));

         while($row = $statement_getAllGames->fetch(PDO::FETCH_ASSOC)){
             $games[] = array('game'=>$row);
         }
         echo json_encode(array('games'=>$games));

 };

役に立ったら、テーブルの構造を追加できます。

4

1 に答える 1

1
FROM game, users

結合条件がありませんgame.user_id = user.user_id。これを WHERE 句に追加するか、新しい SQL-92 結合構文を使用できます ( INNER JOIN ON と WHERE 句を参照)。

FROM game INNER JOIN users ON game.user_id = user.user_id
于 2013-01-22T18:29:40.073 に答える