我有一個問題,如果任何人都可以回答。請原諒我對此沒有經驗,但這是我嘗試的第一個項目,所有這些對我來說都是新的。我正在努力在使用php和mySQL的工作中建立一個庫存系統的過程,並且我已經就如何顯示當前借給人們的項目打了一道牆。MySQL查詢太多?
我有用於分配給用戶的項目分爲4類,這些項目的貸款記錄存儲在4個不同的表中。我還爲用戶提供了另一個表格,以及這些項目的表格及其特徵。
當我的頁面顯示時,需要將所有分配給每個用戶的項目分組在一張表中。關於如何做到這一點,我有兩個想法,但我不確定哪個是最好的方法。
我的第一個想法是從用戶表中提取所有用戶並將信息存儲到數組中,然後從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次調用數據庫。有沒有人對我的最佳行動方案有什麼意見?任何幫助將不勝感激。
絕對應該是**一個**查詢。你在問錯方式。你的第一個問題應該只用[sql]和[mysql]標記,要求正確的數據庫設計** –
是的,你必須弄清楚你的數據庫設計。然後,您將使用JOIN將所有數據放入一個查詢中。結果將是您爲了創建表而創建的數組。 – cantaffordretail
'JOIN' 4個表格,並用userID過濾它們 –