2014-10-01 65 views
0

我想知道爲什麼這個查詢不起作用。這是查詢生成器語句:MySql查詢不能使用max子句

$this->getBuilder() 
    ->select('code', 'name', 'date') 
    ->groupBy('name', 'code') 
    ->having('MAX(date)') 
    ->get() 

這將導致此錯誤:

SQLSTATE[HY000]: General error: 1 near "?": syntax error (SQL: select "code", "name", "date" from "rival_rates" group by "name", "code" having "MAX(date)" ) (Illuminate\Database\QueryException) 

我不知道哪裏是問號,沒有任何參數。

如果我通過mysql命令行運行SQL查詢它的工作原理:

mysql> select code, name, date from rival_rates group by name, code having MAX(date); 
+------+------+------------+ 
| code | name | date  | 
+------+------+------------+ 
| 100 | tal | 2014-10-01 | 
| 100 | tal2 | 2014-10-05 | 
| 200 | tal2 | 2014-10-03 | 
+------+------+------------+ 
3 rows in set (0.00 sec) 

mysql> 

如果我刪除它的工作「具有」部分。那有什麼問題?

預先感謝您。

+0

'選擇代碼,名稱,MAX(日)從名字rival_rates組,代號'唐'知道laravel但是這應該是您的查詢 – Mihai 2014-10-01 09:59:12

+0

@Mihai我不是爭論查詢本身。在我的回答中,有一種方法可以執行這樣的查詢,而不用討論它是否有意義。 – 2014-10-01 10:03:56

+0

你認爲查詢是錯誤的?我需要每個產品代碼和不同競爭對手價格的最新價格,並且日期不會同時更新,因此日期可能會有所不同。如果有更好的方法... – 2014-10-01 10:18:26

回答

2

您需要havingRaw

$this->getBuilder() 
    ->select('code', 'name', 'date') 
    ->groupBy('name', 'code') 
    ->havingRaw('MAX(date)') 
    ->get() 
+0

在那裏? – Naincy 2014-10-01 09:55:14

+0

當然,您無法做其他操作。 「擁有」並不具備這樣的能力。 – 2014-10-01 09:55:55

+0

什麼是查詢輸出? – Mihai 2014-10-01 09:58:17

0

您在語法中遇到問題。

$this->getBuilder() 
    ->select('code', 'name', 'date') 
    ->groupBy('name', 'code') 
    ->having('MAX(date)') 
    ->get() 

這裏,具有第3個需要像參數->having('MAX(date)', '>=', '2014-09-25')

注意:第一個參數是列名,第二個用於比較操作符和第三是該比較值。

0
$condition = 'MAX(date)'; 

$this->getBuilder() 
    ->select('code', 'name', 'date') 
    ->groupBy('name', 'code') 
    ->having($condition) 
    ->get() 

這也行得通。如果你不想給條件賦予參數。

+0

它不會改變任何東西,它不會工作。 – 2014-10-01 09:55:23