我试图搜索这个,但我无法在谷歌上提出我的问题。也许有一些我不知道的术语。
我有两张桌子,一张用于客户,另一张用于电话号码。每个客户都可以有很多电话号码。对于每个客户,我想添加与他相关的电话号码。所以我的所作所为:
$clients = $this->select();
$result = array();
foreach ($clients as $key => $client) {
$client->phones = $this->getClientPhones($client->cli_id);
$result[$key] = $client;
}
这很有效。但是,如果有最好的方法,我想知道这是否是正确的方法。
感谢。
答案 0 :(得分:0)
这种方法的主要问题是你基本上用很多查询来骚扰你的数据库。您基本上要求客户列表,然后是客户端1的电话号码列表,然后是客户端2的电话号码列表,然后是客户端3的电话号码列表等。
更好的方法是请求数据库一次检索客户端列表,然后再次获取所有检索到的客户端的电话号码列表。
$clients = $this->select();
$clientIds = array_map(function($client){ return $client->cli_id; }, $clients);
$clientPhones = $this->getAllClientPhones($clientIds);
// do something with phone numbers
在sql中,getAllClientPhones
的工作方式与getClientPhones
非常相似,但使用WHERE client_id IN (?)
代替WHERE client_id = ?
。