2013-06-02 37 views
0

我對cakephp有非常中等的理解,我還沒有能夠解決我有這個問題。獲取一個不同的值,也是一個具體的數值,並顯示在一個數組中

對於我的網站,人們可以存儲他們使用的某些物質的日誌。稍後我會使用這些數據(匿名)將圖表和統計數據顯示回網站。現在我所有的數據都存儲在一個名爲「記錄」的表中,並且我設置了組件/模型。

我只想關注的是'記錄'表中的「物質」字段該字段明顯具有由網站的不同成員重複多次的相同值。

實施例:

物質 X X ý Ç Ç Ç d

正如你可以看到,x被重複兩次,Y,一旦,C,三次,和d ,一次。

我需要CakePHP的查詢該表並顯示一個數組作爲這樣

['x', '2'], 
['y', '1'], 
['c', '3'], 
['d', '1'] 

我假設我將不得不使用DISTINCT和SUM?但我真的不知道該怎麼做。

感謝誰可以幫助

回答

0

,你正在尋找的基礎SQL查詢

SELECT substance, COUNT(*) 
    FROM records 
GROUP BY substance 

這裏是SQLFiddle

我不是在CakePHP中的專家,但它可能看起來像

$result = $this->Record 
    ->find('all', 
      array('fields' => array('Record.substance', 'COUNT(*)'), 
       'group' => array('Record.substance'))); 
+0

@ user2444539你的問題需要更多幫助嗎? – peterm

+0

是的,我正試圖解決它,但不能得到它的工作。看看我在這篇文章中的其他回覆! – user2444539

+0

我嘗試了你的方法。當使用 $ grouped = implode(',',$分組); 我得到'數組到字符串轉換'錯誤 – user2444539

0
foreach($possibleSubstance as $substance){ 
    $conditions = array(
    'Record.substance' => $substance 
); 
    $result[$substance] = $this->Record->find('count', array('conditions' => $conditions)); 
} 

$結果將是一個數組[ 'X'] =>#,[ 'Y'] =>#等

如果可能的物質是未知的,你可以通過做第一個讓他們:

$fields = 'DISTINCT Record.substance'; 
$possibleSubstances = $this->find('all', array('fields' => $fields)); 

這將創建一個數組:

$possibleSubstances = array(
    (int) 0 => array(
    'Record' => array(
     'substance' => 'x' 
    ) 
), 
    (int) 1 => array(
    'Record' => array(
     'substance' => 'y' 
    ) 
), 
); 

希望這有助於。

0

爲什麼不使用虛擬字段進行記錄? http://book.cakephp.org/2.0/en/models/virtual-fields.html

$this->Record->virtualFields['sum'] = 'COUNT(*)'; 

// now sum is a field automatically, as well 
$grouped = $this->Record->find('all', array(
    'group' => 'Record.substance'); 

把所有的記錄,甚至爲列表(由您的要求):

$grouped = $this->Record->find('list', array(
    'fields' => array('Record.substance', 'Record.sum'), 
    'group' => 'Record.substance'); 

將返回你的數組:

['x', '2'], 
['y', '1'], 
['c', '3'], 
['d', '1'] 

最乾淨的方法。 當然,您也可以通過「物質」或「總和」來訂購。

+0

我的輸出; 2,1,4,1,6,1,3,3,7,1 $ this-> Record-> virtualFields ['sum'] ='COUNT(*)'; $ groupped = $ this-> Record-> find('list',array( 'fields'=> array('Record.substance','Record.sum'), 'group'=>'Record.substance 「)); $ grouped = implode(',',$ grouped); $ this-> set('grouped_set',$ grouped); 然後我只是在視圖中回顯'grouped_set'。 – user2444539

+0

你爲什麼內爆?只需調試()var。 – mark

+0

的原因是因爲,我需要的數據以這種格式顯示: 'X', '2', 'Y', '3' 等 如果我使用debug($ VAR)它顯示的它是這樣的:'x'=>'2', 我需要它在我的格式的原因是因爲我需要將它插入谷歌圖表 – user2444539

相關問題