11

私は私を夢中にさせている質問があります、そして私はCakePHPでそれほど経験がないことを認めなければなりません。この質問で述べたように 、CakePHPの検索関数でDISTINCTを使用し、次のようにDISTINCTを使用します。

$this->Model->find('all', array('fields'=>'DISTINCT field_name'));

DISTINCT値を返さず、代わりにすべての行を返します。実際、ここでのDISTINCTは完全に無意味です。なぜなら、何らかの理由で、CakePHPがを追加するからTableNameです。idSQLクエリで(なぜ?? id参照を削除できますか??)、すべてのDISTINCT主キー(=すべての行=役に立たない)を効果的に返します。

したがって、特定のfield_name列のDISTINCT値を返したいのです。find('all')またはfind('list')関数だけを使用してそれを行うことはできませんか?上記のリンクで説明されているこのSet::extract()関数を使用してそれを行う適切な方法は本当にありますか?これはCakePHPによる過度に間接的な解決策のようです。通常、Cakeは私の生活を楽にしてくれます。:-) findとDISTINCTを一緒に使用する適切な方法は何ですか?たぶんDISTINCTはfind()では機能しませんか?

CookBookを見ると、「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/retrieveing-your-data.html

これは、DISTINCTを使用できるはずであることを示していますが、ここでは何をしますか?(User.name)は、DISTINCTが必要なfield_nameに対応していますか、それともmy_column_nameは私のfield_nameですか?

最後に、CakePHP 1.xからCakePHP2.xに移行するときに、これは変更されましたか?つまり、Stackoverflowで見られるCakePHP 1.xの答えはまだ関連していますか?

前もって感謝します!

4

3 に答える 3

10

はい、2番目のスニペットはSELECT DISTINCTCakePHP2.xでを行う正しい方法です。User.nameフィールド名に対応します。この場合nameは、usersテーブルのフィールドに対応します。my_column_name結果セット内のフィールド名の(オプションの)エイリアスです。つまりname、フィールドの代わりに結果セット内で名前が付けられmy_column_nameます。

于 2012-06-24T12:40:57.970 に答える
7

条件付き検索でdistinctを使用する正しい方法は次のとおりです。

$this->Model->find('all', array('fields' => array('DISTINCT Model.database_fieldname'),'conditions' => array('Model.database_fieldname' =>$val )));

ここで、$ valには、クエリで渡したい値が含まれています。

ごきげんよう

于 2012-10-31T07:05:35.560 に答える
2

にとってCakePHP 3.X

個別のフィールドを選択するには、次のdistinct()方法を使用できます。

// Results in SELECT DISTINCT country FROM a table...
$query = $articles->find();
$query->select(['country'])
    ->distinct(['country']);

クックブックのドキュメント

于 2017-05-02T10:44:12.890 に答える