2015-06-25 159 views
0

我有問題通過使用條件語句獲取2個不同的行數。如何從數組中獲取值我從數據庫中獲取?

$sql = select sum(id = :id AND category = :cat) as count1, 
       sum(category = :cat) as count2 
     from furniture; 
$stmt = $connectdb->prepare($sql); 
$stmt->execute(array(':id'=>$id, ':cat'=>"1")); 
$resulta = $stmt->fetchAll(PDO::FETCH_ASSOC); 

$rowCount1 = count(count1); 
$rowCount2 = count(count2); 

如何獲得count1或count2的計數值?

回答

0

->fetchall()方法返回結果行的數組,所以你就必須做

$rowCount1 = $resulta[0]['count1']; 
$rowCount2 = $resulta[0]['count2']; 

或者當你知道只會有一個結果行使用

$resulta = $stmt->fetch(PDO::FETCH_ASSOC); 
$rowCount1 = $resulta['count1']; 
$rowCount2 = $resulta['count2']; 

,正如adendum,我不知道該查詢正在做什麼,或者即使它可以工作!

+0

我喜歡其中的第二個:)不要忘記$ rowCount2的頭腦;) – d0ug7a5

+0

'$ rowCount2'喲固定它。複製/粘貼...魔鬼概念 – RiggsFolly

+0

看起來不錯謝謝:) – Bekki

1

可以使用fetch代替fetchAll因爲你的結果將只包含1個記錄:

$resulta = $stmt->fetch(PDO::FETCH_ASSOC); 

要訪問記錄做:

$rowCount1 = $resulta['count1']; 
$rowCount2 = $resulta['count2']; 

除此之外,你需要在你的查詢報價,並您需要在您的查詢中使用where子句:

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

但是,我懷疑這是否會導致所需的結果。

+0

一種可怕的循環這個解決方案,除非我錯了,留下兩個'$ rowCount1'和'$ rowCount2'爲1,因爲'$ resulta ['count1']'和'$ resulta ['count2']'都將長度爲1?所以你可以在這裏擺脫'count()'的使用,我會下注。 – d0ug7a5

+0

謝謝。看起來不錯。我原來的查詢是''選擇剪切從傢俱哪裏cutID =:custID和category =:貓「;'我chnaged它到上述因爲我需要從它得到兩個計數值。在我上面的查詢中,我省略了WHERE cutID =:custID和category =:cat'會改變輸出嗎? – Bekki

+0

@ d0ug7a5 True刪除了計數。 – Daan

1

我可能會這樣做。順便說一句,道具您對SQL總結,而不是做後:)

$resulta = $resulta[0]; 

$rowCount1 = $resulta['count1']; 
$rowCount2 = $resulta['count2']; 
+0

謝謝d0ug7a5。 – Bekki