Laravel DB 里的 union 怎么用呢?

我想把同时查询两个表,然后把结果排序:

$topics = Topic::select(['id','title as title2','created_at'])->where('title','like','%'. $keyword .'%')->orwhere('body','like','%'. $keyword .'%');

$test_psies = TestPsy::select(['id','title as title2','created_at'])->where('title','like','%'. $keyword .'%')->orwhere('body','like','%'. $keyword .'%')->union($topics)->latest()->paginate(10);

我要怎么判断哪个来自哪张表?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 5

使用union的时候必须遵守一个规则,查询字段必须是一致的。而且报错信息已经写得很明显了,字段冲突。

Topic表和TestPsy表必须取相同字段才能使用union

5年前 评论
wongvio (楼主) 5年前
L学习不停 (作者) 5年前

我光看报错信息了,还没看到你下面问了一句 另外比如查询出来结果以后,我要怎么判断哪个来自哪张表

你用原生sql能查出来,那说明你laravel代码生成的和你原生写的不一样,不然怎么会报错。你原生sql是和报错信息的sql一样吗?

回答你这句问题,union查的出来结果是重复数据,就是说两个表都有。不存在你要判断结果来自于哪里。你的mysql水平有待提高啊,这是入门就会学的知识点。

5年前 评论
wongvio (楼主) 5年前
$topic =  DB::table('test_psies')->select(['id','title as title1','created_at'])
           ->where('title','like','%'. $keyword .'%');

$query =  DB::table('topics')->select(['id','title as title2','created_at'])
           ->where('title','like','%'. $keyword .'%')->union($topic);

$querySql = $query->toSql();
$result = DB::table(DB::raw("($querySql) as a"))->mergeBindings($query)->orderBy('created_at','desc')->paginate(10);

dd($result);
5年前 评论

有一个方法:你可以在SELECT后面加上常量加以区分:

> SELECT id,title,created_at,1 FROM topics
5年前 评论
wongvio (楼主) 5年前
三斤和他的喵 (作者) 5年前
wongvio (楼主) 5年前
三斤和他的喵 (作者) 5年前

如下图 :+1: :joy:

5年前 评论
wongvio (楼主) 5年前
oldopr 4年前

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