【问题标题】:php - get total of number of results in foreachphp - 获取 foreach 中的结果总数
【发布时间】:2014-05-06 04:39:10
【问题描述】:

我有一个 foreach 循环,它将在我的数据库中进行搜索。我想获取搜索返回的总行数。

目前,我有这个:

foreach ($stmt as $row) {

    $search=$dbh->prepare("SELECT * FROM advertisement_clicks WHERE username=:username AND token=:token");
    $search->bindParam(":username",$userdata['id']);
    $search->bindParam(":token",$row['token']);
    $search->execute();
    echo $search->rowCount(); 

}

这将打印出:00001100 - 我怎样才能得到它们的总结果? (在这种情况下,它将是 2)

更好的是,我如何 foreach 循环之外获得总结果?

循环外的代码是这样的:

$stmt = $dbh->prepare("SELECT * FROM advertisements WHERE status='2' AND fixed='1' AND fixed_expire>:time AND membershipFilter='0'");
$stmt->bindParam(":time",time());
$stmt->execute();
$f=$stmt->rowCount();

【问题讨论】:

    标签: php pdo foreach


    【解决方案1】:

    你可以这样做 -

    $count = 0 ;
    
    foreach ($stmt as $row) {
    
        $search=$dbh->prepare("SELECT * FROM advertisement_clicks WHERE username=:username AND token=:token");
        $search->bindParam(":username",$userdata['id']);
        $search->bindParam(":token",$row['token']);
        $search->execute();
        $count += $search->rowCount(); 
    
    }
    
    echo $count ;
    

    【讨论】:

    • 你如何编码证明问题中的以下陈述? (在这种情况下,它将是 2)
    • 根据他的笔记,他在每个循环中得到 0 0 0 0 1 1 0 0,将它们全部添加,你得到 2,这正是代码要做的!
    【解决方案2】:
    $x = 0;
    foreach ($stmt as $row) {
    
    $search=$dbh->prepare("SELECT * FROM advertisement_clicks WHERE username=:username AND token=:token");
       $search->bindParam(":username",$userdata['id']);
       $search->bindParam(":token",$row['token']);
       $search->execute();
       echo $search->rowCount(); 
       $x++;
    }
    echo $x;
    

    【讨论】:

      【解决方案3】:

      用 htis 之类的变量来计数:

      $total = 0;
      foreach ($stmt as $row) {
      
          $search=$dbh->prepare("SELECT * FROM advertisement_clicks WHERE username=:username AND token=:token");
          $search->bindParam(":username",$userdata['id']);
          $search->bindParam(":token",$row['token']);
          $search->execute();
          $total +=  $search->rowCount(); 
      
      
      }
      

      $total 将持有总值。

      【讨论】:

        【解决方案4】:

        以上参与者都没有真正理解他们编写的代码的含义:)
        此外,即使在这种特殊情况下数字不是很高

        ,也不应将 rowCount 用于此类目的
        $total  = 0;
        $query  = "SELECT count(*) FROM advertisement_clicks 
                   WHERE username=:username AND token=:token";
        $search = $dbh->prepare($query);
        $search->bindParam(":username", $userdata['id']);
        $search->bindParam(":token",    $row['token']);
        
        foreach ($stmt as $row) {
            $search->execute();
            $total += $search->fetchColumn(); 
        }
        

        应该是的

        此外,假设 $stmt 是前一个查询的结果,大多数情况下您可以通过使用 GROUP BY 运算符获得另一个查询中的计数。 完全没有这样的额外循环

        【讨论】:

        • 为什么不应该使用rowCount?那和fetchColumn()有什么区别
        • 这很明显。虽然您只需要计数,但您正在选择记录本身。选择它们是您给数据库带来负担的无用负载。还要检查我所做的更新
        • 我看到您在 while 循环之外使用了 $row['token'] 。我不能这样做,因为我正在检查点击广告的人。
        • 但是,你根本不需要这个循环
        • 当我将它添加到我的代码时它不起作用。我无法让它工作。你可以试着帮助我,让它没有循环吗?
        猜你喜欢
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 2018-10-25
        • 1970-01-01
        • 2021-05-06
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多