摘要:我的解決方法是,在需要一對(duì)一關(guān)聯(lián)的表中加入,這樣就會(huì)將這個(gè)條件放在分頁之前執(zhí)行,方式運(yùn)行時(shí)如下參數(shù)一般是指關(guān)聯(lián)對(duì)象是外聯(lián)還是內(nèi)聯(lián),內(nèi)聯(lián)可以表示內(nèi)聯(lián)條件優(yōu)先,分頁在后。
用到許多數(shù)據(jù)庫關(guān)系化映射中間件,hibernate,jpa,iBATIS,最近研究nodejs,發(fā)現(xiàn)一款不可多得的orm開源工具sequelize,支持promise,映射配置/查詢/數(shù)據(jù)輸出等都是json格式,非常順心,官方文檔很標(biāo)準(zhǔn)但完全說不透其強(qiáng)大的功能,很多都需要實(shí)際用到才能體會(huì),就像json一樣變化多端,你猜不透它有多少種變化。
好,下面來看一個(gè)需求案例:
一條這樣的普通查詢語句:
select * from product join producton product.id=place.productid and place.city=1100 where product.price>100 limit 10
用sequelize的query來寫,如果寫成這樣:
models.product.findAll({ where: ["price>=?", 100 ], include: [{ model:models.product, where: { city:1100 } }], limit:12 })
實(shí)際上運(yùn)行的sql是這個(gè):
select product.*, place.* from (select * from product where product.price>100 limit 10) join place on product.id=place.productid and place.city=1100
想要的結(jié)果是錯(cuò)誤的,分頁時(shí)沒有把city:1100 條件限制了,結(jié)果有差異,那怎么辦?
于是找方法,看到有人使用加subQuery:false條件來處理,如下:
models.product.findAll({ where: ["price>=?", 100 ], include: [{ model:models.product, where: { city:1100 } }], limit:10, subQuery:false //不讓在子查詢里分頁,全局處理 })
這樣對(duì)于只含一個(gè)include關(guān)聯(lián)的查詢倒是問題不大,如果include多個(gè)對(duì)象,關(guān)聯(lián)的對(duì)象有1對(duì)多,多對(duì)多的關(guān)系,就不好控制了。
我的解決方法是,在需要一對(duì)一關(guān)聯(lián)的表中加入required:true,這樣就會(huì)將這個(gè)條件放在分頁之前執(zhí)行,
models.product.findAll({ where: ["price>=?", 100 ], include: [{ model:models.product, where: { city:1100 }, required:true //inner join方式 }], limit:10, })
運(yùn)行時(shí)sql如下:
select product.*,place.* from product join place on product.id=place.productid and place.city=1100 where product.price>100 limit 10
required參數(shù)一般是指關(guān)聯(lián)對(duì)象是外聯(lián)還是內(nèi)聯(lián),內(nèi)聯(lián)required=true可以表示內(nèi)聯(lián)條件優(yōu)先,分頁在后。
以上內(nèi)容進(jìn)僅供參考,使用場(chǎng)景不同,理解也不一樣。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95467.html
摘要:?jiǎn)栴}對(duì)于小的偏移量,直接使用來查詢沒有什么問題,但隨著數(shù)據(jù)量的增大,越往后分頁,語句的偏移量就會(huì)越大,速度也會(huì)明顯變慢。優(yōu)化思想避免數(shù)據(jù)量大時(shí)掃描過多的記錄解決子查詢的分頁方式或者分頁方式。MySQL的分頁查詢通常通過limit來實(shí)現(xiàn)。 MySQL的limit基本用法很簡(jiǎn)單。limit接收1或2個(gè)整數(shù)型參數(shù),如果是2個(gè)參數(shù),第一個(gè)是指定第一個(gè)返回記錄行的偏移量,第二個(gè)是返回記錄行的最大數(shù)目。...
功能梳理完了以后,咱們就可以開始數(shù)據(jù)庫表設(shè)計(jì)了: 數(shù)據(jù)庫表圖: showImg(https://segmentfault.com/img/bVbr9GC?w=1922&h=1140); 首先打開Navicat Premium 創(chuàng)建數(shù)據(jù)庫 blog 配置如下: showImg(https://segmentfault.com/img/bVbr81Y?w=720&h=352); 課前學(xué)習(xí):1、Sequ...
摘要:今天把這個(gè)問題講明白了,看看是怎么個(gè)多表關(guān)聯(lián)以及如何去優(yōu)化這個(gè)關(guān)聯(lián)。現(xiàn)需要在列表展示表的來源渠道,且該渠道可搜索。關(guān)聯(lián)表字段增加查詢中的搜索模型也是通過實(shí)現(xiàn)的,該模型通過控制著哪個(gè)字段可搜索,哪個(gè)字段不可搜索。 作者:白狼 出處:http://www.manks.top/yii2_many_ar_relation_search.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留...
閱讀 798·2021-09-06 15:02
閱讀 2439·2019-08-30 15:43
閱讀 2164·2019-08-30 11:26
閱讀 2372·2019-08-26 12:12
閱讀 3538·2019-08-23 18:24
閱讀 3254·2019-08-23 18:16
閱讀 695·2019-08-23 17:02
閱讀 2241·2019-08-23 15:34