2015-06-25 39 views
0

我有以下查詢。獲取兩種類型的行數最少的行數

$sql = "SELECT customer FROM furniture WHERE id = :id AND category = :cat"; 
$stmt = $connectdb->prepare($sql); 
$stmt->execute(array(':id'=>$id, ':cat'=>"1")); 
$resulta = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$rowcount = count($result); 

這很好用。但我有一個要求從WHERE id = :id AND category = :cat獲得行數,以及從WHERE category = :cat獲得行數。是否有可能在不必將所有這些SELECT查詢行寫入兩次的情況下執行它們?

+0

這裏是什麼'id'? PK?如果您需要計入'category'字段,則必須根據表中的'customer'或任何其他字段找到它。 –

回答

1

可以使用條件和得到2個不同的計數的東西作爲

select 
sum(id = :id AND category = :cat) as count1, 
sum(category = :cat) as count2 
from furniture; 

後來你剛剛獲取的記錄,並得到count1價值觀和count2

注意:如果你只是做行數它將始終返回1,因爲它使用聚合函數

1

我建議您將查詢寫爲:

select sum(id = :id) as numCatId, count(*) as numCat 
from furniture 
where cat = :cat; 

將條件放在where子句中允許MySQL使用furniture(cat)(或更好的furniture(cat, id))上的索引。一般來說,在where條款中使用通用過濾條件是一個好主意。這減少了處理查詢其餘部分所需的行數。