摘要:我的解決方法是,在需要一對一關(guān)聯(lián)的表中加入,這樣就會將這個條件放在分頁之前執(zhí)行,方式運行時如下參數(shù)一般是指關(guān)聯(lián)對象是外聯(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格式,非常順心,官方文檔很標準但完全說不透其強大的功能,很多都需要實際用到才能體會,就像json一樣變化多端,你猜不透它有多少種變化。
好,下面來看一個需求案例:
一條這樣的普通查詢語句:
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 })
實際上運行的sql是這個:
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é)果是錯誤的,分頁時沒有把city:1100 條件限制了,結(jié)果有差異,那怎么辦?
于是找方法,看到有人使用加subQuery:false條件來處理,如下:
models.product.findAll({ where: ["price>=?", 100 ], include: [{ model:models.product, where: { city:1100 } }], limit:10, subQuery:false //不讓在子查詢里分頁,全局處理 })
這樣對于只含一個include關(guān)聯(lián)的查詢倒是問題不大,如果include多個對象,關(guān)聯(lián)的對象有1對多,多對多的關(guān)系,就不好控制了。
我的解決方法是,在需要一對一關(guān)聯(lián)的表中加入required:true,這樣就會將這個條件放在分頁之前執(zhí)行,
models.product.findAll({ where: ["price>=?", 100 ], include: [{ model:models.product, where: { city:1100 }, required:true //inner join方式 }], limit:10, })
運行時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)對象是外聯(lián)還是內(nèi)聯(lián),內(nèi)聯(lián)required=true可以表示內(nèi)聯(lián)條件優(yōu)先,分頁在后。
以上內(nèi)容進僅供參考,使用場景不同,理解也不一樣。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95467.html
摘要:問題對于小的偏移量,直接使用來查詢沒有什么問題,但隨著數(shù)據(jù)量的增大,越往后分頁,語句的偏移量就會越大,速度也會明顯變慢。優(yōu)化思想避免數(shù)據(jù)量大時掃描過多的記錄解決子查詢的分頁方式或者分頁方式。MySQL的分頁查詢通常通過limit來實現(xiàn)。 MySQL的limit基本用法很簡單。limit接收1或2個整數(shù)型參數(shù),如果是2個參數(shù),第一個是指定第一個返回記錄行的偏移量,第二個是返回記錄行的最大數(shù)目。...
功能梳理完了以后,咱們就可以開始數(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); 課前學習:1、Sequ...
摘要:今天把這個問題講明白了,看看是怎么個多表關(guān)聯(lián)以及如何去優(yōu)化這個關(guān)聯(lián)?,F(xiàn)需要在列表展示表的來源渠道,且該渠道可搜索。關(guān)聯(lián)表字段增加查詢中的搜索模型也是通過實現(xiàn)的,該模型通過控制著哪個字段可搜索,哪個字段不可搜索。 作者:白狼 出處:http://www.manks.top/yii2_many_ar_relation_search.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留...
閱讀 812·2021-09-06 15:02
閱讀 2452·2019-08-30 15:43
閱讀 2176·2019-08-30 11:26
閱讀 2384·2019-08-26 12:12
閱讀 3551·2019-08-23 18:24
閱讀 3270·2019-08-23 18:16
閱讀 704·2019-08-23 17:02
閱讀 2255·2019-08-23 15:34