[英]Wrong data retrieved from database
因此,我想檢索列表元素的順序。 順序由用戶預先設置,並存儲在下表中。 因為我也想檢索列表元素的名稱和描述,所以我需要合並兩個表(見下文)。
但是,實際檢索到的是一個包含16個元素的數組(應該是四個,因為到目前為止它只存在四個元素)。 數組過長,無法在此處發布,但是如果您感興趣,我將其放在phpFiddle中以在此處找到 。
好吧,我真的試圖找出問題所在(可能一如既往的容易),但是沒有運氣。
非常感謝您的時間和幫助!
listModel.php:
public function GetOrderedElements($userId, $listId) {
// $userId = 46
// $listId = 1
$query = "SELECT le.listElemId, le.listElemName, le.listElemDesc, lo.listElemOrderPlace
FROM listElement AS le
INNER JOIN listElemOrder AS lo
ON le.listId = lo.listId
WHERE lo.userId = ?
AND lo.listId = ?
ORDER BY listElemId";
$stmt = $this->m_db->Prepare($query);
$stmt->bind_param("ii", $userId, $listId);
$listElements = $this->m_db->GetOrderedElements($stmt);
return $listElements;
}
database.php:
public function GetOrderedElements(\mysqli_stmt $stmt) {
if ($stmt === FALSE) {
throw new \Exception($this->mysqli->error);
}
if ($stmt->execute() == FALSE) {
throw new \Exception($this->mysqli->error);
}
if ($stmt->bind_result($listElemId, $listElemName, $listElemDesc, $listElemOrderPlace) == FALSE) {
throw new \Exception($this->mysqli->error);
}
$listElements = array();
while ($stmt->fetch()) {
$listElements[] = array('listElemId' => $listElemId,
'listElemName' => $listElemName,
'listElemDesc' => $listElemDesc,
'listElemOrderPlace' => $listElemOrderPlace);
}
var_dump($listElements);
$stmt->Close();
return $listElements;
}
從數據庫中:
listElemOrder :
listElemOrderId | listId | listElemId | userId | listElemOrderPlace
1 1 1 46 1
4 1 2 46 4
2 1 3 46 2
3 1 4 46 3
listElement :
listElemId | listElemName | listId | listElemDesc | listElemOrderPlace
1 Elem A 1 Derp NULL
2 Elem B 1 Herp NULL
3 Elem C 1 Lorum NULL
4 Elem D 1 Ipsum NULL
注意:表listElement中的“ listElemOrderPlace”是元素的最終順序(所有用戶平均),不要與另一張表中具有相同名稱的元素混在一起,這只是列表元素的特定用戶順序(在這種情況下是很有意思的)。
您忘記將listElemId
添加到您的加入條件中:
FROM listElement AS le
INNER JOIN listElemOrder AS lo
ON le.listId = lo.listId
AND le.listElemId = lo.listElemId -- add this criterion
由於這兩個表中的列名稱相同,因此可以縮寫為:
FROM listElement AS le
INNER JOIN listElemOrder AS lo
USING (listId, listElemId)
當實際上不存在歧義時,第二種形式還具有避免“歧義列”錯誤的優點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.