当前位置: 首页 >数据库 > laravel4.2 union联合,join关联分组查询最新记录时,查询条件不对,解决方案

laravel4.2 union联合,join关联分组查询最新记录时,查询条件不对,解决方案

需求: 分组联合查询,或者最新记录。 

问题:  mysql分组的时候默认会查询第一条记录,存在gourp by时 order by 无效。 一般解决办法就是 ,select * from ( select * from order by id) group by 。 因为项目实际中 查询规则复杂,需要使用到  union 联合查询, 另外和关联查询,在 laravel4.2中 如果关联join 多条件时,在union 会出现 最后的结果集不正确。问题是出现在,laravel最后生成 where 表达式时不对。

执行 最后 sql : 

SELECT*FROM((SELECTidFROMtable_aJOIN table_b ON table_a.id = table_b.t_id (AND table_b.x_id =  1)WHEREid =2)UNION(SELECTidFROMtable_cJOIN table_d ON table_c.id = table_d.t_id (AND table_c.x_id =  3)WHEREid = 4)) AS tGROUP BY id

 

正确解析应该时表达式数组是  [ 1,2,3,4]  ,实际查询laravel 表达式时  结果为[ 1,1,2,3,3,4](忘记,具体是几个,但是会出现1 和 3 出现多次是真实出现的)

$model_a = DB::table( 'table_a' )->select( 'id' )->join( 'table_b' , function( $query ){	$query->on( 'table_b.a_id' , '=' , 'table_a.id' )	->where( 'table_b.x_id' , 1)})->where( 'id' , 2 )->orderBy('time','desc'); 
 
$model_b = DB::table( 'table_c' )->select( 'id' )->join( 'table_d' , function( $query ){ $query->on( 'table_c.c_id' , '=' , 'table_d.id' )->where( 'table_c.x_id' , 3);})->where( 'id' , 4 )->orderBy('time','desc');

   

$result = $model_b->union( $model_a );
$data = DB::table( DB::raw("($result->toSql() ) as t"))->mergeBindings( $result->getBindings() )->groupBy( 'id' )->get();

  

个人解决方案: 1.

      获取2个model表达式的 查询条件 $model_a->getBindings();   结果位  [1,2]

      $model_b->getBindings();   结果位  [3,4]

$data = DB::table( DB::raw("($result->toSql() ) as t"))->setBindings(array_merge($model_a->getBindings(),$model_b->getBindings())->groupBy( 'id' )->get();

 

      2. 使用源生sql方式解决。

    

作者:墨白`Blog
来源链接:https://www.cnblogs.com/inkwhite/p/10266714.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/117565.html

标签:group by
分享给朋友:

“laravel4.2 union联合,join关联分组查询最新记录时,查询条件不对,解决方案” 的相关文章

MySQL表的增删改查(进阶) 2022年05月16日 21:54:11
连接数据库版本不一致 2022年05月20日 01:07:15
mysql查询最后一条记录 2022年06月08日 19:25:45
MySql 查询两张表的数据差别 2022年06月11日 20:14:35
MYSQL根据日期查询 2022年06月11日 21:03:52
mysql查询数据库表的数据行数 2022年06月12日 12:49:23