从mysql中的先前结果循环查询

时间:2018-04-20 07:59:05

标签: php mysql

我有两个表,用户和潜在客户。我的目标是找到状态为“已完成”和“空闲”的潜在客户,然后使用该结果获取该用户的所有潜在客户。这是我的查询

$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;
}

0 个答案:

没有答案