select temp.* FROM
(select uc.circle_id, cas.id as statistic_id, cas.created_at FROM circle JOIN user_circle as uc ON circle.id = uc.circle_id
LEFT JOIN circle_activity_statistics as cas ON uc.circle_id = cas.circle_id WHERE circle.type != 0 and
uc.user_id = 39471 )
as temp
WHERE DATE_FORMAT(created_at,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') OR ISNULL(created_at);
不希望用这种方式:
$query = DB::select("select temp.* FROM (select uc.circle_id, cas.id as statistic_id, cas.created_at FROM circle
JOIN user_circle as uc ON circle.id = uc.circle_id
LEFT JOIN circle_activity_statistics as cas ON uc.circle_id = cas.circle_id WHERE circle.type != 0 and uc.user_id = 39471 ) as temp
WHERE DATE_FORMAT(created_at,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') OR ISNULL(created_at)");
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我的原则是,普通的单表sql用ORM,不仅省事,而且带来很多的ORM对象的方法可以使用。但是以上如此复杂的SQL还是建议原生,你用ORM也不好组织,而且一旦有些变动,改起来也费劲
个人喜欢用原生的,不喜欢ORM。其实原生SQL就很好了。
这个sql太多内容如果用orm你会发现代码并不是很简洁,连缀一大堆,调试起来特别麻烦,这么长的sql,我一般直接写原生。
子查询中有左链接,我觉得你要优化写法,不要这样一条sql去处理比较好
用laravel就推荐使用ORM,左联接可以用关联关系去实现。
上面写的有点问题不需要isnull('created_at'),最终如下: