簡體   English   中英

從數據庫檢索到錯誤的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM