运行 foreach 循环内的另一个 sql 查询

Run another sql query inside foreach loop

我有一个来自第一个 sql 查询的 foreach 循环,然后在那个 foreach 循环中,我想 运行 另一个 sqli 查询,但我得到了这个错误: Call to a member function prepare() on a non-object

这是我的查询:

$sqli = "SELECT DISTINCT approveby FROM ads LIMIT 0,20";
$resulti = $conn->prepare($sqli);
$resulti->execute();
foreach ($resulti as $rowi){
$sqlii = "SELECT * FROM ads WHERE approveby=:approveby ORDER BY approvedate ASC";
    $resultii = $conn->prepare($sqlii);
    $resultii->bindParam(':approveby', $rowi['approveby']);
    $resultii->execute();
    $num_rowsii=$resultii->rowCount();
    echo "This person: ". $rowi['approveby']."has approved $num_rowsii advertisements";
}

以上代码的原因是:

有不同的人可以批准来自 table 个广告的广告。会有一个人批准很多广告。所以第一个查询,我想列出刚刚批准广告的人。

而第二个查询,我想计算每个人的批准总数。

所以请告诉我如何解决上面的错误?还有什么方法可以更有效地做到这一点?

非常感谢

您可以在单个查询中获得结果,用户GROUP BY而不是DISTINCT结果,然后统计结果将显示每个组集的广告总数,试试这个查询

$sqli = "SELECT *, count(*) AS `total_advertisements` FROM ads 
    GROUP BY approveby
    ORDER BY approvedate ASC
    LIMIT 0,20";
$resulti = $conn->prepare($sqli);
$resulti->execute();
foreach ($resulti as $rowi){
  echo "This person: ". $rowi['approveby']."has approved {$rowi['total_advertisements']} advertisements";
}

该代码根本不会执行良好。相反,像这样组合两个查询:

$sql = "SELECT approveby, count(*) FROM ads GROUP BY approveby"
$result = $conn->prepare($sql);
$result->execute();