我有一个问题,如果任何人都可以回答。请原谅我对此没有经验,但这是我尝试的第一个项目,所有这些对我来说都是新的。我正在努力在使用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过滤它们 –