[英]How to JOIN a group of tables in a database with similar name using SQL query?
[英]How to join 2 tables with group by query using laravel
我的數據庫中有一個用戶和聊天表。 這是我表中的一些示例數據:
用戶表:
id | name | avatar
1 john default.png
2 mark picture.jpg
聊天表:
id | user_id | friend_id | message | status
1 1 2 hello 0
2 1 2 hi 1
狀態列的目的是確定是否已閱讀該消息。
status 0 = unread message
status 1 = read message
這是我的代碼,用於對所有未讀郵件進行分組和計數:
$chat = DB::table('chats')
->join('users', 'users.id', '=', 'chats.user_id')
->select('user_id', DB::raw('count(*) as total'))
->where('friend_id', Auth::user()->id)
->where('status',0)
->groupBy('user_id')
->get();
這是我嘗試插入用戶頭像時的代碼,但出現此錯誤: users.avatar' isn't in GROUP BY
$chat = DB::table('chats')
->join('users', 'users.id', '=', 'chats.user_id')
->select('users.avatar','user_id', DB::raw('count(*) as total'))
->where('admin_id', Auth::user()->id)
->where('status',2)
->groupBy('user_id')
->get();
我想要的也是獲取發送消息的用戶的化身。 我不知道如何構造查詢以獲取頭像列。 任何幫助,將不勝感激。 謝謝。
如果您按users
表中的id
進行GROUP BY
,則您也應該能夠在users
表中選擇其他任何列:
$chat = DB::table('chats')
->join('users', 'users.id', '=', 'chats.user_id')
->select('users.id', 'users.avatar', DB::raw('COUNT(*) AS total'))
->where('friend_id', Auth::user()->id)
->where('status',0)
->groupBy('users.id')
->get();
在第一個站點上,這似乎違反了GROUP BY
的規則,該規則指出無法選擇非聚合列。 但這是允許的,因為用戶id
功能上確定了其他列的值。 換句話說,如果我們選擇一個用戶id
,我們將確切知道他的化身值必須是多少。
如果上述方法給您帶來錯誤,則可以嘗試使用GROUP BY
:
->groupBy('users.id', 'users.avatar')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.