2013-01-22 76 views
0

我的JSON響應有問題。在我的mysql數據庫中有兩個表:用戶和遊戲。當我嘗試從1位用戶那裏獲得所有遊戲時,我會在我的用戶表中獲得這些遊戲,但*我的用戶表中有不同用戶的數量。因此,如果我想要8位用戶的所有遊戲,例如3款遊戲,那麼我只能獲得這些遊戲的數量,而不是我擁有的唯一用戶數量,比方說9。因此,查詢會返回27個遊戲(9 * 3相同的遊戲)。我在這裏做錯了什麼?PDO查詢返回很多結果PHP

$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)); 

}; 

如果有幫助,我可以添加我的表的結構。

回答

1
FROM game, users 

您缺少連接條件game.user_id = user.user_id。您可以將其添加到WHERE子句中,或者您可以使用更新的SQL-92連接語法(請參閱INNER JOIN ON vs WHERE clause):

FROM game INNER JOIN users ON game.user_id = user.user_id 
+0

謝謝!這是我的一天。 – nostradamus