我需要将此mySQL查询转换为laravel DB()外观:
SELECT
t.*,
t_users.username as topic_user,
last_reply.user_id as last_reply_user_id,
r_users.username as last_reply_username,
last_reply.replies_count,
IFNULL(last_reply.created_at,t.created_at) as last_update
FROM
topics as t
left join users as t_users on t_users.id = t.user_id
left join ( select r.*,count(r.id) as replies_count from (select * from replies order by created_at desc) as r group by r.topic_id ) as last_reply on last_reply.topic_id = t.id
left join users as r_users on r_users.id = last_reply.user_id
ORDER BY IFNULL(last_reply.created_at,t.created_at) DESC
我现在尝试了很多不同的方法,差不多2天了,但是无法让它发挥作用。最新的一个是:
$query = DB::table('topics as t')
->leftJoin('users as t_users', 't_users.id', '=', 't.user_id')
->leftJoin(DB::raw('select r.*,count(r.id) as replies_count from (select * from replies order by created_at desc) as r group by r.topic_id'), 'last_reply.topic_id', '=', 't.id')
->leftJoin('users as r_users', 'r_users.id', '=', 'last_reply.user_id')
->select(
't.*,
t_users.username as topic_user,
last_reply.user_id as last_reply_user_id,
r_users.username as last_reply_username,
last_reply.replies_count,
IFNULL(last_reply.created_at,t.created_at) as last_update'
);
并导致此错误:
SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,用于在'select附近使用正确的语法 r。*,count(r.id)as replies_count from(select * from replies order by cre'在第1行(SQL:选择
t
。*,
为``从topics
开始,t
离开 在users
上t_users
加入t_users
。id
=t
。user_id
左连接 选择r。*,将(r.id)作为replies_count从(选择*来自回复)中选择 由r_topic_id on作为r group by by created_at desc)last_reply
。topic_id
=t
。id
离开加入users
作为r_users
r_users
。id
=last_reply
。user_id
)
感谢您的帮助!