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

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

执行 最后 sql :

SELECT
*
FROM
(
(
SELECT
id
FROM
table_a
JOIN table_b ON table_a.id = table_b.t_id (AND table_b.x_id = 1)
WHERE
id =2
)
UNION
(
SELECT
id
FROM
table_c
JOIN table_d ON table_c.id = table_d.t_id (AND table_c.x_id = 3)
WHERE
id = 4
)
) AS t
GROUP 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方式解决。

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

  1. JOIN关联表中ON,WHERE后面跟条件的区别

    select * from td  left join (select case_id as sup_case_id , count(*) supervise_number from  td_kcdc ...

  2. 【MySQL】过滤后的结果集较大,用LIMIT查询分页记录,查询效率不理想

    > 参考的优秀文章 优化LIMIT分页--<高性能MySQL>(电子工业出版社) > 场景描述 遇到一个场景:查询排序后的结果集较大,我们采用分页显示,每页显示20条记录,但是 ...

  3. SQL语句 查询最新记录

    要求:SQL语句按ID以最新时间查询最新的一条记录 方法1: select * from (select *, ROW_NUMBER() over(partition by id order by u ...

  4. Sql:主表与子表的最新记录级联查询

    SELECT * FROM MainTable mLEFT JOIN (SELECT d.* FROM (SELECT MAX(clc.Id) AS id FROM ChildTable AS clc ...

  5. 查询最新记录的sql语句效率对比

    在工作中,我们经常需要检索出最新条数据,能够实现该功能的sql语句很多,下面列举三个进行效率对比 本次实验的数据表中有55万条数据,以myql为例: 方式1: SELECT * FROM t_devi ...

  6. mysql——查询语句——单表查询——(示例)

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

  7. [办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)

    一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241 ...

  8. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  9. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

随机推荐

  1. mybatis ${}使用注意事项

    ${key}有值, ${key,jdbcType=VARCHAR}没有值 总结:${}使用时不要指定jdbcType等属性,指定这些反而取不到值,这也是跟#{}的一个区别.以上只是开发中遇到的情况,具 ...

  2. SQL Server ->> 自动创建表并从文件加载数据

    这个存储过程自动创建表并从文件加载数据. 有一点需要说明的是Excel 12.0驱动是兼容了Excel 97-2003和Excel 2007两者格式的Excel文件. CREATE PROCEDURE ...

  3. java.langThrowable:STACKTRACE

    Jboss版本是4.2.0.GA代码运行完后总报错 但是程序的运行结果没问题 请问下这是什么原因2009-12-11 01:53:26,611 INFO  [org.jboss.resource.co ...

  4. 【Leetcode】【Medium】Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  5. python 函数&条件,循环

    条件if <条件判断1>: <执行1>elif <条件判断2>: <执行2>elif <条件判断3>: <执行3>else: & ...

  6. imooc课程:Java高并发秒杀API 记录

    Java高并发秒杀API之业务分析与DAO层 Java高并发秒杀API之Service层 Java高并发秒杀API之web层 Java高并发秒杀API之高并发优化 除了并发部分外的这个web开发的总结 ...

  7. U-Mail邮件群发如何过滤无效地址?

    U-Mail邮件群发平台可以自动过滤掉无效和重复地址,过滤效果如下图 U-Mail邮件群发平台会将客户已经确认好是无效地址的加入无效地址库,下次再导入改无效地址就直接拒绝.邮件格式不正确的也会直接过滤 ...

  8. 使用burpsuite对移动app抓包分析

    测试移动APP的联网请求,需要获取路径或者参数的时候,使用该工具burpsuite非常方便! 要求: 移动终端和PC处于同一个wlan环境下 第一步:获取本地地址,cmd-->ipconfig  ...

  9. iOS 人机交互指导方针(iOS Human Interface Guidelines)

    iOS 人机交互指导方针(iOS Human Interface Guidelines) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名 ...

  10. ResNet 修改

    https://github.com/tornadomeet/ResNet apache 开源项目 修改如下: 训练模块 import argparse,logging,os import mxnet ...