0

次の条件で、CakePHP アプリケーションのテーブルでfind('all')クエリを実行したいと思います。

1- 主キーの値が 17 に等しい

2-my_column_idテーブル内の別の列の値は、列のすべての値の最大値ですが、主キー値が 17 に等しいデータムmy_column_idの値よりも小さいですmy_column_id

3-my_column_idテーブル内の別の列の値は、列のすべての値の MIN ですが、主キー値が 17 に等しいデータムmy_column_idの値より大きいmy_column_id

したがって、上記のクエリでは 3 つの結果が得られるはずです。

これらすべてを 1 つのクエリで取得することは可能ですか? または、3 つの個別のクエリが必要ですか?

私は次のようなものを試しました:

$results = $this->Model->find('all', array(
    'conditions' => array(
        'MAX(Model.my_column_id) <' => 23,
        'Mddel.id' => 17,
        'MIN(Model.my_column_id) >' => 23
    )
));

23my_column_id主キーが 17 に等しいデータムの値を表します

しかし、それは私に次のエラーを与えます:SQL Error: 1111: Invalid use of group function

助けてください。

4

3 に答える 3

0

where句でMySQL集計関数(MAX、MINなど)を使用することはできません。

最も簡単な方法は、GROUP BY を明示的に含めて、次のように HAVING を使用することだと思います。

$this->Model->find('all', array(
    'group' => 'Model.some_field HAVING MAX(Model.some_field) > 23 
        AND MIN(some_field) < 23'
));

(それは意味がありませんが、私は思いません!)*

それはあなたが望むもののようなものです。

トビー

アップデート

[*] つまり、値より大きい値とより小さい値の両方を照会するのは意味がないと思います!

于 2013-04-22T08:27:30.467 に答える
-1

conditions中に配列を渡すことでそれを行うことができますfind

$this->Model->find('all',array
(
   'conditions' => array
   (
       'Model.field' => 17,
       'MAX(Model.field) < ' => 17,
       'MIN(Model.field) > ' => 17 
   )
))

OP コメント レスポンス

SQL Error: 1305: FUNCTION NAX does not exist

解決策: 関数と括弧またはセットの間のすべてのスペースを削除しますsql_mode="IGNORE_SPACE"

これがエラーの原因です:

SELECT MAX (id) as something FROM Example

これは正しく動作します:

SELECT MAX(id) as something FROM Example
于 2013-04-22T03:39:12.977 に答える