从mysql中的前一个结果循环查询

8yoxcaq7  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(232)

我有两张table,用户和潜在顾客。我的目标是找到状态为“completed”和“idle”的潜在客户,然后使用该结果获取该用户的所有潜在客户。这是我的问题

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题