私の CakePHP モデルでは、テーブルからデータを取得しようとしています。
DISTINCT を使用してみましたが、DISTINCT を使用してもクエリ結果は変わらないようです。同じニックネーム
を持つ多くの行が表示されます
「DISTINCT Mytable.nick」を使用
$this->Mytable->find('all',
array(
'fields'=> array(
'DISTINCT Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'order' => array('Mytable.id DESC')
));
「グループ Mytable.nick」で
$this->Mytable->find('all',
array(
'fields'=> array(
'Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'group' => 'Mytable.nick',
'order' => array('Mytable.id DESC')
));
「Mytable.nick」で
$this->Mytable->find('all',
array(
'fields'=> array(
'Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'order' => array('Mytable.id DESC')
));
編集: CakePHP 2.1 でも DISTINCT オプションを使用できないようです。「GROUP BY」を試してみると、問題は解決しました。しかし、私のクエリからわかるように、Mytable.idを降順で並べ替える必要があります。GROUP BY を使用すると、Mysql が関連する行を見つけると、他の行は取得されません。例えば。
- id=1、ニック=マイク、年齢=38、場所=英国
- id=2、ニック=アルバート、年齢=60、場所=アメリカ
- ID=3、ニックネーム=灰、年齢=42、場所=英国
- id=4、ニック=アルバート、年齢=60、場所=new_zelland
を使用するgroup Mytable.nick
と、結果に 4 行目が表示されず、2 行目が表示されます。mysql が "albert" を 2 度目に見たとき、それが結果に含まれていないためです。しかし、最新の "albert" の結果が必要です。それは不可能ですか?
Edit2: コンフリクトによる並べ替え/グループ化はよくある問題のようです。この質問でいくつかのヒントを見つけました。しかし、それはネイティブMysqlクエリの解決策を提供します. CakePHP タイプのクエリのソリューションが必要です。