どなたか答えていただける方に質問です。これについての私の経験不足をお許しください。しかし、これは私が試みた最初のプロジェクトであり、これはすべて私にとって本当に新しいものです。私は、php と mySQL を使用して職場で在庫システムを構築しようとしていますが、現在人々に貸し出されているアイテムをどのように表示するかについて、少し壁にぶつかっています。
ユーザーにプロビジョニングされているアイテムが 4 つのカテゴリに分類されており、これらのアイテムの貸与の記録が 4 つの異なるテーブルに格納されています。ユーザー用の別のテーブルと、アイテムとその特性のテーブルもあります。
ページが表示されたときに、各ユーザーに割り当てられているすべてのアイテムをテーブルにまとめて表示したい。これを行う方法について 2 つのアイデアがありますが、どちらが最善の方法かはわかりません。
私が最初に考えたのは、ユーザー テーブルからすべてのユーザーを取得して配列に格納し、次に 4 つのローン テーブルからすべての情報を取得して、各テーブルを配列に格納することでした。そこから私は次のようなことをします
for($i=1;$i>sizeof($usersArray);$i++){
for($a=1;$a>sizeof($loanTable1Array);$a++){
if($userArray[$i][userID] == $loanTable1Array[$a][userID]{
//list items
}
}
for($b=1;$b>sizeof($loanTable2Array);$b++){
if($userArray[$i][userID] == $loanTable2Array[$b][userID]{
//list items
}
}
for($c=1;$c>sizeof($loanTable3Array);$c++){
if($userArray[$i][userID] == $loanTable3Array[$c][userID]{
//list items
}
}
for($d=1;$d>sizeof($loanTable4Array);$d++){
if($userArray[$i][userID] == $loanTable4Array[$d][userID]{
//list items
}
}
}
ただし、これに関する私の懸念は、約 100 ~ 150 人のユーザーがいて、各テーブルに平均 100 個の異なるアイテムがあることです。これは、ループの約 40,000 ~ 60,000 回の反復を意味します。
私の他のアイデアは、ユーザー テーブルからすべてのエントリを取得し、そのデータを使用して、このような where ステートメントで userID を使用して他の 4 つのテーブルをクエリすることでした。しかし、ループ内にクエリがある場合、それは間違っていると読みました。
$sql = "SELECT userID FROM users";
$allUsers = runQuery($sql); //data is sanitized before running the query
for($i = 1; $i<sizeof($allUsers); $i++){
$loan1sql = "SELECT * FROM loantable1 WHERE userID = {$allUsers[$i][$userID]}'";
$loan1Items= runQuery($loan1sql);
for($a = 1; $a<sizeof($loan1Items); $a++){
//list items
}
$loan2sql = "SELECT * FROM loantable2 WHERE userID = '{$allUsers[$i][$userID]}'";
$loan2Items= runQuery($loan2sql);
for($b = 1; $b<sizeof($loan2Items); $b++){
//list items
}
$loan3sql = "SELECT * FROM loantable3 WHERE userID = '{$allUsers[$i][$userID]}'";
$loan3Items= runQuery($loan3sql);
for($c = 1; $c<sizeof($loan3Items); $c++){
//list items
}
$loan4sql = "SELECT * FROM loantable4 WHERE userID = '{$allUsers[$i][$userID]}'";
$loan4Items= runQuery($loan4sql);
for($d = 1; $d<sizeof($loan1Items); $d++){
//list items
}
}
これを行うと、ページがロードされるたびにデータベースへの 400 ~ 600 回の呼び出しが発生します。私の最善の行動方針について誰か意見がありますか? どんな助けでも大歓迎です。