所以,我想检索列表元素的顺序。顺序由用户预先设置,并存储在下表中。因为我还想检索列表元素的名称和描述,所以我需要组合两个表(见下文)。
但是,实际检索到的是一个包含 16 个元素的数组(应该是 4 个,因为它现在只存在 4 个元素)。该数组太长,无法在此处发布,但如果您有兴趣,我将其放在 phpFiddle中,以便在此处找到。
好吧,我真的试图找出问题所在(可能像往常一样容易),但没有运气。
非常感谢您的时间和帮助!
列表模型.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;
}
数据库.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
列表元素:
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'是元素的最终顺序(所有用户平均),不能与其他表中同名的元素混合,这只是特定用户对列表元素的顺序(其中在这种情况下是有趣的)。