我有一個問題讓我瘋狂,我不得不承認我沒有CakePHP的經驗。由於在這個問題上, Using DISTINCT in a CakePHP find function提到,使用DISTINCT這樣:CakePHP 2.1 - 如何在find中正確使用DISTINCT()
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
不會返回不同的值,而是返回所有行。事實上,這裏的DISTINCT完全沒有意義,因爲CakePHP出於某種原因增加了TableName
。 (爲什麼我可以刪除id引用?),有效地返回每個DISTINCT主鍵(= all rows = unhelpful)。
因此,我仍然想要返回特定field_name列的DISTINCT值。我可以不使用find('all')或find('list')函數嗎?使用上面鏈接中描述的Set :: extract()函數是否真的是正確的方法?這似乎是CakePHP的一個非常間接的解決方案,通常Cake會讓我的生活更輕鬆。 :-)一起使用find和DISTINCT的正確方法是什麼?也許DISTINCT不適用於find()?
看着菜譜,他們說:「做一個DISTINCT查詢的一個簡單的例子,您可以使用其他運營商,如MIN(),MAX()等,以類似的方式:」
<?php
array(
'fields' => array('DISTINCT (User.name) AS my_column_name'),
'order' = >array('User.id DESC')
)
?>
來源:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html
這表明DISTINCT應該是可以使用的,但什麼是什麼嗎?是否(User.name)對應於field_name我想要DISTINCT for或是my_column_name我的field_name?
最後,從CakePHP 1.x遷移到CakePHP 2.x時,是否有任何更改?即在CakePHP 1.x上看到的Stackoverflow的答案仍然相關?
在此先感謝!
感謝您的回答。然而,使用'$ regions = $ this-> Provider-> find('all',array('fields'=> array('DISTINCT(provider.region)AS region'));'或'$ regions = $ this-> Provider-> find('all',array('fields'=> array('DISTINCT(provider.region)')));'它沒有選擇唯一的條目。相反,所有不是DISTINCT的行並不是我想要的。由此產生的SQL查詢:'SELECT DISTINCT('provider'.'region'),'Provider'.'id' FROM'carecrowd'.'providers' AS''Provider' WHERE 1 = 1'。我是否以某種方式誤解了你,並且是我的代碼不正確? – alieninlondon
生成的SQL查詢不正確,查詢中應該沒有'Provider.id'。你使用哪個CakePHP版本?和哪個數據庫?至少在CakePHP 2.1.3和MySQL中會生成正確的查詢。 – dhofstet
感謝您的回覆。我有CakePHP 2.1.3和MySQL。所以這不是問題。但是,您的回覆讓我思考其他問題,而不是錯誤的語法,但與模型有關。事實證明,問題在於我爲Provider模型建立了模型關聯,沒有模型關聯,上面的語法工作正常。所以Cake將'Provider.id'自動添加到SQL查詢中,它應該是這樣或者是一個錯誤?我在問,因爲模型關聯有效地阻止了相關模型的DISTINCT查找查詢。或者我錯過了什麼? – alieninlondon