mysql 兩張不同結(jié)構(gòu)的表連表查詢,合并纤垂,并分頁矾策,排序 教你如何實(shí)現(xiàn)UNION

?MySQL用union把兩張沒有關(guān)聯(lián)的表合并,并使用條件查詢排序分頁

?場(chǎng)景應(yīng)用:

類似某團(tuán)的搜索峭沦,既可以搜索店鋪贾虽,也可以搜索商品;

類似某名片的搜索吼鱼,既可以搜索企業(yè)蓬豁,也可以搜索名片;

?實(shí)現(xiàn):

我用下面在laravel中實(shí)現(xiàn)的代碼案例說下:


$test1= UserHistoryCompany::orWhere(function ($query) use($title) {

? ? ? ? ? ? $query->where('user_history_company.user_id', '=', $this->user_id)->where('is_delete',0)

? ? ? ? ? ? ? ? ->where('company.name', 'like', '%'.$title.'%');

? ? ? ? })

? ? ? ? ? ? ->join('company','company.id','=','user_history_company.company_id')

? ? ? ? ? ? ->select('user_history_company.id','user_history_company.user_id','user_history_company.company_id as c_id',

? ? ? ? ? ? ? ? 'user_history_company.updated_at','company.name as company_name','company.id as company_id','logo',

? ? ? ? ? ? ? ? DB::raw('2 as type , 0 as card_id , 0 as head_img , 0 as job_name , 0 as department_name , 0 as name '));

? ? ? ? $result= UserHistoryCard::orWhere(function ($query) use($title) {

? ? ? ? ? ? $query->where('user_history_card.user_id', '=', $this->user_id)->where('is_delete',0)

? ? ? ? ? ? ? ? ->where('company.name', 'like', '%'.$title.'%');

? ? ? ? })

? ? ? ? ? ? ->orWhere(function ($query) use($title) {

? ? ? ? ? ? ? ? $query->where('user_history_card.user_id', '=', $this->user_id)->where('is_delete',0)

? ? ? ? ? ? ? ? ? ? ->where('card.name', 'like', '%'.$title.'%');

? ? ? ? ? ? })

? ? ? ? ? ? ->orWhere(function ($query) use($title) {

? ? ? ? ? ? ? ? $query->where('user_history_card.user_id', '=', $this->user_id)->where('is_delete',0)

? ? ? ? ? ? ? ? ? ? ->where('card.mobile', 'like', '%'.$title.'%');

? ? ? ? ? ? })

? ? ? ? ? ? ->join('card','card.id','=','user_history_card.card_id')

? ? ? ? ? ? ->join('company','company.id','=','card.company_id')

? ? ? ? ? ? ->select('user_history_card.id','user_history_card.user_id','user_history_card.card_id as c_id',

? ? ? ? ? ? ? ? 'user_history_card.updated_at','company.name as company_name','company.id as company_id','logo',

? ? ? ? ? ? ? ? DB::raw('1 as type , user_history_card.card_id , card.head_img , card.job_name , card.department_name , card.name '))

? ? ? ? ? ? ->unionAll($test1);

? ? ? ? $sql = $result->toSql();

? ? ? ? $result = DB::table(DB::raw("($sql) as a "))

? ? ? ? ? ? ->mergeBindings($result->getQuery())

? ? ? ? ? ? ->orderBy('updated_at', 'desc')

? ? ? ? ? ? ->paginate(request()->input('page_num') ?? 50);

? ? ? ? ? dd($result);


什么 菇肃?上面的看不懂地粪?好吧,我簡(jiǎn)單列下:

1.當(dāng)兩張表屬性完全相同時(shí)琐谤,可以直接合并(union會(huì)刪除重復(fù)數(shù)據(jù)蟆技,union all會(huì)返回所有結(jié)果集)

(1)將兩個(gè)表合并


? ? ? ? select * from 表1

? ? ? ? union

? ? ? ? select * from 表2


? ? ? ? select * from 表1

? ? ? ? union all

? ? ? ? select * from 表2


(2)將兩個(gè)表合并,并使用條件查詢


? ? select * from ( select * from 表1

? ? union select * from 表2)

? ? as 新表名

? ? where 條件1 and 條件2


2、當(dāng)兩個(gè)表的屬性不同時(shí),要分別查詢每個(gè)屬性质礼,給不同屬性名取一個(gè)別名,例如收入和支出表:(表中的id和remark是相同屬性名旺聚,其他的屬性名都不同)


select * from(

(select id,

a1 as a,

b1 as b,

c1 as c,

d1? as d,

e1 as e,

updated_at

from a1_table)

union all

(select id,

a2 as a,

b2 as b,

c2 as c,

d2? as d,

e2 as e,

updated_at

from a2_table)

) as c


溫馨提示:

坑1:雖然2個(gè)表結(jié)構(gòu)要整合再一起排序分頁,就要通過 as 別名來轉(zhuǎn)換相同的字段眶蕉,不然就被最后一個(gè)查詢條件的字段給覆蓋了砰粹,

坑2:上面的a1,b1,c1 順序要對(duì)著a2,b2,c2,才行妻坝,否則就被最后一個(gè)查詢條件的字段給覆蓋了,

錯(cuò)誤示范:

1惊窖,a1,b1,c1 順序要對(duì)著c2,b2,a2刽宪,你查詢出來的a1值就會(huì)到c2里面,c1到a2里面界酒,不信你可以試試圣拄。

坑3:2個(gè)查詢字段數(shù)量必須一致,否則就會(huì)報(bào)錯(cuò)毁欣。

完事了庇谆,比較懶,想看詳情的話凭疮,看下面2個(gè)鏈接饭耳,前人寫的

————————————————

參考鏈接:https://blog.csdn.net/qq_43341807/article/details/120115151

參考鏈接:https://www.cnblogs.com/zhengchuzhou/p/10262260.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市执解,隨后出現(xiàn)的幾起案子寞肖,更是在濱河造成了極大的恐慌,老刑警劉巖衰腌,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件新蟆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡右蕊,警方通過查閱死者的電腦和手機(jī)琼稻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宋距,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旷赖,“玉大人漓骚,你說我怎么就攤上這事腰鬼∶跽蓿” “怎么了瞪浸?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵漓糙,是天一觀的道長(zhǎng)潦匈。 經(jīng)常有香客問我闹丐,道長(zhǎng)横殴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮衫仑,結(jié)果婚禮上梨与,老公的妹妹穿的比我還像新娘。我一直安慰自己文狱,他們只是感情好粥鞋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞄崇,像睡著了一般呻粹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苏研,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天等浊,我揣著相機(jī)與錄音,去河邊找鬼摹蘑。 笑死筹燕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衅鹿。 我是一名探鬼主播撒踪,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼大渤!你這毒婦竟也來了制妄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤泵三,失蹤者是張志新(化名)和其女友劉穎忍捡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體切黔,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砸脊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纬霞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌埂。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诗芜,靈堂內(nèi)的尸體忽然破棺而出瞳抓,到底是詐尸還是另有隱情,我是刑警寧澤伏恐,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布孩哑,位于F島的核電站,受9級(jí)特大地震影響翠桦,放射性物質(zhì)發(fā)生泄漏横蜒。R本人自食惡果不足惜胳蛮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丛晌。 院中可真熱鬧仅炊,春花似錦、人聲如沸澎蛛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谋逻。三九已至呆馁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毁兆,已是汗流浹背浙滤。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荧恍,地道東北人瓷叫。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓屯吊,卻偏偏與公主長(zhǎng)得像送巡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盒卸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容