2014-03-27 62 views
0

我有一個foreach循環,它會在我的數據庫中執行搜索。我想獲得搜索返回的總行數。php - 獲取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(); 

回答

2

您可以按照下面做 -

$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 ; 
+0

你如何編碼證明問題中的以下陳述? (在這種情況下,它會是2) – Hassan

+0

根據他的說明,他將在每個循環中獲得0 0 0 0 1 1 0 0,將它們全部添加並且獲得2,這就是代碼將執行的操作! –

-1
$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; 
0

通過像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將保留總價值。

0

以上都不是參與者真正瞭解他們寫了:)
此外,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操作的手段。 根本沒有這樣一個額外的循環

+0

爲什麼不應該使用rowCount?有什麼不同和fetchColumn() – oliverbj

+0

這是非常明顯的。雖然你只需要計數,但你自己選擇記錄。選擇它們是一種無用的負載,會加重數據庫的負擔。同時檢查我所做的更新 –

+0

我發現你在while循環之外使用$ row ['token']。我無法做到這一點,因爲我正在檢查誰點擊了廣告。 – oliverbj