2016-06-07 79 views
0

我正在構建一個報告系統,我每天都會將一大堆文件導入到我的數據庫中。遇到的問題是我可能在我的數據庫中有重複但有效的記錄。Laravel雄辯;用LIKE搜索顯示最近的記錄

在我的數據庫中,我有以下的,例如,數據集。

ID  NAME   MATERIAL  PRICE  CREATED_AT 
1   Foo   FP1234  3.45   2016-01-01 15:00:00 
2   Bar   FP8177  7.21   2016-01-01 15:00:00 
3   Foo   FP1234  4.87   2016-01-02 15:00:00 
4   Baz   FP1231  3.00   2016-01-02 15:00:00 

我想知道我怎麼能返回上面的結果集,但不包括row 1,因爲它是一樣的row 3,並row 3是更近一些。添加到我的推理,row 13是相同的,但由於row 3有更近的created_at時間戳,我只希望看到這一點。

棘手的是我需要能夠在此之上進行分頁,並且使用Laravel的Collection方法forPage是我希望避免的。

我的問題是

如果運行具有相等太操作搜索我可以使用Laravel ORDERBY和GROUPBY,但是我需要考慮爲好。

回答

1

您可以使用子查詢,以獲得一個有序的數據集上執行其它功能。

一個解決方案(我不知道你的表名,或者你的LIKE變量($ queryTerm)作爲傳遞):

DB::table('tableName')->whereIn('tableName.id', function($subquery) { 
    $subquery->select('tableName.id') 
     ->from('tableName') 
     ->orderBy('created_at','DESC'); 
}) 
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%') 
->where('tableName.column', '=', $anotherQueryTerm) 
->groupBy('tableName.MATERIAL') 
->get(); 

完全相同的將與口才工作,雄辯使用查詢生成器在下面創建數據庫查詢:

SomeModel::whereIn('tableName.id', function($subquery) { 
    $subquery->select('tableName.id') 
     ->from('tableName') 
     ->orderBy('created_at','DESC'); 
}) 
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%') 
->where('tableName.column', '=', $anotherQueryTerm) 
->groupBy('tableName.MATERIAL') 
->get(); 
+1

謝謝,賈斯汀!我會給那個前,並會讓你知道:-) –

+1

這工作,謝謝! –

+0

不用擔心!感謝您的反饋! –