gpt4 book ai didi

php - 无法使用 PHP 和 MySQL 获取已接受的请求

转载 作者:行者123 更新时间:2023-11-29 11:34:49 24 4
gpt4 key购买 nike

我正在开发一个Android应用程序,用户可以向其他用户发送一些挑战请求,在挑战请求被接受后,我正在更新该表中特定行的状态,现在我应该能够检索那些接受的请求要求。我正在成功检索待处理的质询请求,但无法检索已接受的质询请求。实际上我从该表中获取了所有行,这不好。

这就是我的表格挑战的样子:

id

user_one_id 对表 users 的引用,其中包含 user_id

user_two_id 对表 users 的引用,其中包含 user_id

状态

这就是我检索待处理请求的方式:

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 为一或 ID 为 2 的用户,因为他可能是登录的用户正在发送请求或正在接收请求的人。

更新:

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

最佳答案

这应该按照您需要的方式返回结果

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

关于php - 无法使用 PHP 和 MySQL 获取已接受的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36804377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com