だから、リストの要素の順序を取得したい。順序はユーザーによって事前に設定され、以下の表に格納されます。リスト要素の名前と説明も取得したいので、2 つのテーブルを結合する必要があります (以下を参照)。
ただし、実際に取得されるのは 16 個の要素を含む配列です (現在は 4 個の要素しか存在しないため、4 個のはずです)。配列は長すぎてここに投稿できませんが、興味がある場合は、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;
}
データベース.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'は、要素の最終的な順序 (すべてのユーザーの平均) であり、他のテーブルの同じ名前の要素と混在しないでください。これは、リスト要素の特定のユーザーの順序にすぎません (これは、この場合は興味深いものです)。