union查询出来之后,字段值互换了

开发环境:PHP7.2 win8.1 laravel5.4
先读A表(主表)数据,再读B表(明细表)数据,最后$a->unionAll($b)
最后是sum处理里面的一个字段,结果发现最后的数据不对
开始一步一步研究
A表打印出来的数据如下(数据量较多,只摘取了其中一段)

"stock_id" => "1629785859861559552"
"store_id" => "1629780977976914944"
"product_id" => "1629783010779894016"
"supplier_id" => "1629780382641606144"
"stock" => "49.0000"
"remaining_month" => 0

B表打印出来的数据

"stock_id" => "388581679721879368"
"product_id" => "1629783010779894016"
"store_id" => "1629780977976914944"
"supplier_id" => "1629780382641606144"
"stock" => "-20.0000"
"remaining_month" => 0

注意上面有一个product_id为1629783010779894016,这里是正确的,在数据库中也是对的
当我执行了unionAll之后,结果却不对,执行代码如下:

$unionRes = $a->unionAll($b);
// 原因出来在这里,我打印完联合后的数组后,发现数据不一致了
dump($unionRes->get()->toArray());
$sss = DB::table(DB::raw("({$unionRes->toSql()}) AS item"))
->mergeBindings($unionRes->getQuery())
// 另一种写法 --没有生效
// ->addBinding($unionRes->getBindings())
->select(
'product_id',
DB::raw('sum(stock) as stock')
)
->groupBy('product_id')
->get();

原本是product_id为1629783010779894016的,在$unionRes的结果集中却错行显示在了store_id字段中,从这里导致了就算结果出现了问题

    "stock_id" => "388581679721879368"
    "store_id" => "1629783010779894016"
    "product_id" => "1629780977976914944"
    "supplier_id" => "1629780382641606144"
    "stock" => "-20.0000"
    "remaining_month" => 0

打印了一下原本两个结果集中的stock字段的数据,是正确的结果

"A结果集中的stock相加后:" 99.0
"B结果集中的stock相加后:" -29.0
"两个相加:" 70.0 

想知道出现这个问题的原因,感谢!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
laravel_peng
最佳答案

你的 Union 联合表中的字段顺序也要一致吧!!!

file

2年前 评论
讨论数量: 1
laravel_peng

你的 Union 联合表中的字段顺序也要一致吧!!!

file

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!