我有一些奇怪的问题:
我有一个数据库DAYS和USER_DAYS ...... 天:
USER_DAYS:
我有一个函数来检查今天数据库USER_DAYS中是否存在user_id,如果是,那么我从DAYS表中获取数据: (dbhanler.php)
public function getDay($user_id) {
$stmt = $this->conn->prepare("SELECT d.id, d.day, d.status, d.created_at, d.dayDate, d.startTime, d.endTime from days d, user_days ud WHERE d.dayDate = ? AND ud.dayDate = d.dayDate AND ud.user_id = ?");
$t=time();
$dayDate = date("Y-m-d",$t);
$stmt->bind_param("si", $dayDate, $user_id);
if ($stmt->execute()) {
$res = array();
$stmt->bind_result($id, $day, $status, $created_at, $dayDate, $startTime, $endTime);
$stmt->fetch();
$res["id"] = $id;
$res["day"] = $day;
$res["status"] = $status;
$res["created_at"] = $created_at;
$res["dayDate"] = $dayDate;
$res["startTime"] = $startTime;
$res["endTime"] = $endTime;
$stmt->close();
return $res;
} else {
return NULL;
}
}
的index.php
$app->get('/days', 'authenticate', function() {
global $user_id;
$response = array();
$db = new DbHandler();
$result = $db->getDay($user_id);
if ($result != NULL) {
$response["error"] = false;
$response["id"] = $result["id"];
$response["day"] = $result["day"];
$response["status"] = $result["status"];
$response["createdAt"] = $result["created_at"];
$response["dayDate"] = $result["dayDate"];
$response["startTime"] = $result["startTime"];
$response["endTime"] = $result["endTime"];
echoRespnse(200, $response);
} else {
$response["error"] = true;
$response["message"] = "The requested resource doesn't exists";
echoRespnse(404, $response);
}
});
我认为我解决了问题,但有些事情很奇怪: 当我在USER_DAYS中没有user_id记录时,所有工作正常并给我emtpy结果但如果我有user_id记录然后给我错误用户的记录,给我记录最后一个用户记录提交
这里有什么问题? MYSQLi QUERY?
答案 0 :(得分:1)
错误在于表的连接。 仅在当天加入是一个n到m的连接,但是你需要一个唯一的字段来获得1到n的连接。
例如: USER_DAYS
如果执行getDate(用户B的ID) 您将获得条目1,2和3.该函数只需要一行,因此它需要第一行(来自用户A)
按日期ID而不是白天加入
WHERE d.dayDate = ? AND ud.day_id = d.id AND ud.user_id = ?