私は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);
});
サンプルデータと予想される出力がなければ、誰も大したことはできません。 http://sqlfiddle.com/で何かを設定してみてください。 – miken32
u.id = c.user_one_idまたはu.id = c.user_two_idがラップされているはずです –