2013-04-22 128 views
0

我想在CakePHP程序用以下條件進行桌子上的一find('all')查詢:cakephp的複雜查找查詢示例

1-主鍵的值等於17

AND

2-表中另一列my_column_id的值是列my_column_id的所有值的最大值但小於主鍵值等於17的數據的值my_column_id

AND

3-表中的另一列my_column_id的值是該列my_column_id但比的的主鍵值的原點my_column_id值越大的所有值的MIN等於17

所以上面的查詢應該給我3個結果。

是否有可能在單個查詢中獲取所有這些信息?還是我需要三個單獨的查詢?

我想是這樣的:

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

23代表其主鍵的原點my_column_id值等於17

但是,這使我有以下錯誤:SQL Error: 1111: Invalid use of group function

任何請幫助。

回答

-1

你可以通過在find中傳遞conditions數組來完成。

$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 
+0

想這已經不工作,我得到一個SQL錯誤說'SQL錯誤:1305:函數NAX不存在' – user765368 2013-04-22 03:44:06

+0

@ user765368它應該是'MAX'而不是'NAX' – 2013-04-22 03:45:00

+0

對不起,這個錯誤實際上是下面的'SQL錯誤:1111:無效的使用組函數' – user765368 2013-04-22 03:48:08

0

您的where子句中不能使用MySQL聚合函數(MAX,MIN等)。

我認爲最簡單的方法將是明確包含GROUP BY和使用具有,這樣的事情:

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

(雖然這沒有任何意義,我不覺得!)*

這就像你想要的東西。

託比

更新

[*]我的意思是,我不認爲這是有道理進行查詢比更大既值少

0

通常,當我有複雜的查詢時,我只寫出SQL。我不能說速度,我不確定它是否被壓低,但你可以試試這個鏡頭。

$this->Model->query(' 
    SELECT MAX(table.column), 
    MIN(table.column) 
    FROM table 
    WHERE table.id = '$id' 
'); 

而且,如果該控制器是模型的外面確保加載正確的模型(將其放置在上面的查詢)

$this->loadModel('Model');