2014-12-31 69 views
-1

我在Apache PHP服務器頁面運行以下SQL命令PDO:SQL,PDO和PHP - 空調rowCount時()函數

$query = " 
    SELECT 
     id, 
     building_name 
    FROM 
     campus 
"; 

$stmt = $con->prepare($query); 
$stmt->execute(); 
$num = $stmt->rowCount();   // HERE IS THE FUNCTION 

而不是返回整個行數,我想了rowCount()函數只返回「building_name」=「IT House」的行數。我似乎無法找到任何關於此函數的信息,例如它期望的參數等。任何想法如何在賦值操作中修改函數調用?提前致謝!

注意:我知道我可以通過SELECT命令來調節查詢,但我不想限制我的查詢。我需要查詢來表示所有行,但是我需要rowCount來僅表示所需的行。

+1

如果你想算一筆行的子集,但有一個查詢返回完整的行集,那麼你需要兩個查詢。 – halfer

+0

@halfer我喜歡這個想法。我可以在同一個PDO會話中運行兩個單獨的查詢嗎?我現在不在我的工作站上嘗試。另外,如果可能的話,這樣做不好嗎?謝謝。 – Jim22150

+1

是的,儘可能多地使用你需要的。我猜想像我們現在使用的一個頁面,堆棧溢出,可能使用10或20來渲染。以這種方式分割數據檢索的一個有趣特徵是,儘管在一個複雜的查詢中可以做很多事情,但即使考慮到數據庫服務器的多次網絡往返,使用幾個更簡單的查詢有時也更快。 – halfer

回答

2

計數器你可以找到rowCount時這裏的文檔: http://php.net/manual/en/pdostatement.rowcount.php

有別的您正在使用使你不能只選擇行與條件?:

SELECT id, building_name FROM campus WHERE building_name = 'IT House' 
結果做通過結果

SELECT COUNT(*) FROM campus WHERE building_name = 'IT House' 

否則,您必須循環,以確定將滿足條件的行數:

更妙的是你可以選擇計數

$stmt->execute(); 
$result = $stmt->fetchAll(); 
$num = 0; 
foreach($result as $row) { 
    if('IT House' == $row['building_name']) { 
    $num++; 
    } 
} 
+0

是的,我正在做的其他事情要求所有行正在寫入/更新到一個JSON文件,該文件存儲前端使用的所有行。但後端或此腳本也用於編輯特定建築物名稱的行;這是從Web表單的GET請求收到的參數。到目前爲止,我還沒有想出一個更好的方式或地方來更新我的JSON文件,但這似乎暫時有效。 – Jim22150

1

如果你不想將條件添加到SQL語句時,你就需要遍歷所有的結果,然後增加基於building_name是否確實等於IT之家或不

+0

這就是我爲了簡單而避免的。是否沒有任何論點或條件我可以在PHP中編寫來過濾作業? – Jim22150