我有两个表,用户和潜在客户。我的目标是找到状态为“已完成”和“空闲”的潜在客户,然后使用该结果获取该用户的所有潜在客户。这是我的查询
$sql = "SELECT u.id FROM users u LEFT JOIN leads l ON u.id = l.user_id WHERE l.status IN('completed', 'idle')";
...
$result = $stmt->fetchAll();
...
$usersleads = array();
foreach ($result as $userId) {
$sql = "SELECT * FROM leads where user_id = ". $userId;
...
$results = $stmt->fetchAll();
foreach ($results as $ul) {
array_push($usersleads, $row);
}
}
这适用于小结果。但是如果数据变得越来越大,这只会崩溃,我可以理解它。我正在寻找一种更有效的方法来查询数据库。
更新 我想我找到了解决方案。现在只有两个查询。
$sql = "SELECT u.id FROM users u LEFT JOIN leads l ON u.id = l.user_id WHERE l.status IN('completed', 'idle')";
...
$userResult = $stmt->fetchAll();
...
$userIds = [];
foreach ($userResult as $user) {
$userIds[] = $user['id'];
}
$sql = "SELECT * FROM leads where user_id IN('" . implode("','", $userIds) ."')";
...
$leadsResult = $stmt->fetchAll();
...
foreach ($userResult as &$lead) {
$lead['date'] = $this->getDateForLead($lead['id'], $leadsResult);
// add other fields to $userResult
}
...
public function getDateForLead($leadId, $leads)
{
foreach($leads as $lead) {
if ($leadId = $lead['id']) {
return $lead['date'];
}
}
return null;
}