gpt4 book ai didi

mysql - 如何在 LeftJoin 中添加附加参数?

转载 作者:行者123 更新时间:2023-11-29 03:16:57 25 4
gpt4 key购买 nike

在我的 laravel 5.7/eloquent/Mysql 5.5 应用程序中,我需要在聊天列表中获取任何聊天消息的值以及给定 useronly ($user_id) 的任何聊天消息的另外 1 列消息:

我试过:

$chats          = Chat
::select( \DB::raw( ' chats.*, count(cm.id) as messages_count, count(cmu.id) as user_messages_count' ) )
->orderBy('name', 'asc')
->groupBy('chats.id')
->leftJoin( \DB::raw('chat_messages as cm'), \DB::raw('cm.chat_id'), '=', \DB::raw('chats.id') )
->leftJoin( \DB::raw('chat_messages as cmu'), \DB::raw(' cmu.chat_id = chats.id and cmu.chat_id = ' .$user_id ) )
->get();

但是错误:

 Column not found: 1054 Unknown column '' in 'on clause'.

看起来 leftJoin 表达式不能与空值参数一起使用。 或者以其他方式?

$chats          = Chat
::select( \DB::raw( ' chats.*, count(cm.id) as messages_count, count(cmu.id) as user_messages_count' ) )
->orderBy('name', 'asc')
->groupBy('chats.id')
->leftJoin( \DB::raw('chat_messages as cm'), \DB::raw('cm.chat_id'), '=', \DB::raw('chats.id') )
->leftJoin(\DB::raw('chat_messages as cmu'), \DB::raw('cmu.chat_id'), '=', \DB::raw('chats.id'))
->where( 'cmu.user_id', $user_id)
->get(); // `chat_messages` ORDER BY `chat_id` A

可行,但条件不正确

>where( 'cmu.user_id', $user_id)

左连接被跳过,user_messages_count = 0 的行被跳过,但我需要它们。

哪种方式才是正确的?

谢谢!

最佳答案

您不需要多次离开加入 chat_messages。WHERE 子句在这种情况下是无用的。LEFTJOIN 适用于连接表中的列。

$chats= Chat ::select( \DB::raw( ' chats.*, count(cm.id) as 
messages_count, sum(if(cm.user_id='.$user_id.',1,0)) as user_messages_count' ) )
->orderBy('name', 'asc')
->groupBy('chats.id')
->leftJoin( \DB::raw('chat_messages as cm'), \DB::raw('cm.chat_id'), '=', \DB::raw('chats.id') )
->get(); // `chat_messages` ORDER BY `chat_id` A

关于mysql - 如何在 LeftJoin 中添加附加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53969187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com