簡體   English   中英

如何獲取基於特定列的所有不同行?

[英]How to get all distinct rows based on a particular column?

似乎是由於MySQL 5.7或更高版本的更改,默認情況下啟用了SQL模式ONLY_FULL_GROUP_BY,所以我的舊代碼如下所示:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->groupBy('name')
    ->get();

現在拋出錯誤...

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

我嘗試以各種方式更新代碼以嘗試使其正常運行,但是沒有運氣。

這是我目前擁有的:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->selectRaw('name, ANY_VALUE(id), ANY_VALUE(col_a), ANY_VALUE(col_b), ANY_VALUE(col_c), ANY_VALUE(col_d)')
    ->groupBy('name')
    ->get();

這不會引發任何錯誤,但是缺少列數據。

我也嘗試過:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->groupBy('name')
    ->groupBy('id')
    ->get();

不會根據“名稱”返回不同的行。 它只是返回所有內容。

如何在Laravel Eloquent或原始MySQL中做到這一點?

groupBy()方法通過給定鍵將集合的項目分組。 您應該先獲得一個收藏集:

Table::where('name', 'LIKE', '%'.$search_str.'%')
    ->get()
    ->groupBy('name');

config/database.php文件中,將'strict' => true,更改為'strict' => false,然后嘗試

Table::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->get();

我不確定您是否正在尋找這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM