2016-04-22 22 views
0

私はAndroid用のアプリケーションを開発しています。ユーザーはチャレンジリクエストを他のユーザーに送信でき、チャレンジリクエストが受け入れられた後、今私はそれらの受け入れられた要求を取得することができるはずです。私は正常に保留中のチャレンジリクエストを取得していますが、取得できないチャレンジリクエストを受け入れました。実際には、私は良いではないそのテーブルからすべての行を取得しています。PHPとMySQLで受け入れられないリクエストを受け取ることができません

は、これは私のテーブルchallengesがどのように見えるかです:そこからuser_idを持つテーブルusers

id

user_one_id参照

user_two_id参照user_idを持つテーブルusers

statusそこから

これは私が保留中の要求を取得しています方法です:

SELECT u.name, c.user_one_id, c.user_two_id, c.status, c.created_at, 
c.isRead, c.id FROM users u, challenges c 
WHERE c.user_two_id = ? AND c.status = 0 AND u.id = c.user_one_id 
ORDER BY c.created_at ASC 

を、これは私が受け入れられた要求を取得しようとした方法ですが、良い結果を得ていない:

SELECT u.name, c.user_one_id, c.user_two_id, c.status, c.created_at, c.isRead, c.id FROM users u, challenges c 
WHERE c.user_one_id = ? AND 
    c.user_two_id = ? AND c.status = 1 AND u.id = c.user_one_id OR u.id = c.user_two_id 
ORDER BY c.created_at ASC 

ワンノート:それがあるべきログインしようとしているユーザーが、テーブルchallengesのID 1またはID 2のユーザーである可能性があることを考慮してください。おそらく、要求を送信しているユーザーか、要求を受信して​​いるユーザーかもしれません。

UPDATE

のMySQL:

public function acceptedChallenges($user_one_id, $user_two_id) { 
    $stmt = $this->conn->prepare("SELECT u.name, c.user_one_id, c.user_two_id, c.status, c.created_at, c.isRead, c.id FROM users u, challenges c 
           WHERE c.user_one_id = ? AND 
             c.user_two_id = ? AND c.status = 1 AND (u.id = c.user_one_id OR u.id = c.user_two_id)"); 
    $stmt->bind_param("ii", $user_one_id, $user_two_id); 
    if ($stmt->execute()) { 
     $request = $stmt->get_result(); 
     $stmt->close(); 
     return $request; 
    } else { 
     return NULL; 
    } 
} 

私は関数を呼び出しています以下:

$app->post('/accepted_challenges', 'authenticate', function() use ($app) { 

verifyRequiredParams(array('user_one_id', 'user_two_id')); 

$response = array(); 
$db = new DbHandler(); 

$user_one_id = $app->request->post('user_one_id'); 
$user_two_id = $app->request->post('user_two_id'); 

$requests = $db->acceptedChallenges($user_one_id, $user_two_id); 

if ($requests != NULL) { 

    $response["error"] = false; 
    $response["requests"] = array(); 

    while ($request = $requests->fetch_assoc()) { 
     $tmp = array(); 
     $tmp["name"] = $request["name"]; 
     $tmp["id"] = $request["id"]; 
     $tmp["user_one_id"] = $request["user_one_id"]; 
     $tmp["user_two_id"] = $request["user_two_id"]; 
     $tmp["created_at"] = $request["created_at"]; 
     $tmp["isRead"] = $request["isRead"]; 

     array_push($response["requests"], $tmp); 
    } 
} else { 
    $response["error"] = true; 
    $response["message"] = "No pending requests."; 
} 

echoRespnse(200, $response); 
}); 
+0

サンプルデータと予想される出力がなければ、誰も大したことはできません。 http://sqlfiddle.com/で何かを設定してみてください。 – miken32

+0

u.id = c.user_one_idまたはu.id = c.user_two_idがラップされているはずです –

答えて

1

これは結果にあなたが

SELECT u.name, c.user_one_id, c.user_two_id, c.status, c.created_at, c.isRead, c.id FROM users u, challenges c 
WHERE c.user_one_id = ? AND 
    c.user_two_id = ? AND c.status = 1 AND (u.id = c.user_one_id OR u.id = c.user_two_id) 
ORDER BY c.created_at ASC 
を必要とする方法を返す必要があります

更新

SELECT u.name, c.user_one_id, c.user_two_id, c.status, c.isRead, c.id FROM users u, challenges c 
WHERE u.id = ? AND c.status = 1 AND (c.user_one_id=? OR c.user_two_id=?) 

? must be the id you are posting 
+0

jsonでは何の応答も得られません。 –

+0

正しいパラメータをクエリにバインドしてもよろしいですか? –

+0

はい、私はこれらのIDをラップしたとき、私はjsonで何の応答も得ていませんが、ラップすることなく、私はテーブルからすべてのレコードを取得しています。 –

関連する問題