成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

sequelize關(guān)聯(lián)查詢時的分頁問題,join,limit

guyan0319 / 2474人閱讀

摘要:我的解決方法是,在需要一對一關(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

相關(guān)文章

  • 你知道MySQL的Limit有性能問題

    摘要:問題對于小的偏移量,直接使用來查詢沒有什么問題,但隨著數(shù)據(jù)量的增大,越往后分頁,語句的偏移量就會越大,速度也會明顯變慢。優(yōu)化思想避免數(shù)據(jù)量大時掃描過多的記錄解決子查詢的分頁方式或者分頁方式。MySQL的分頁查詢通常通過limit來實現(xiàn)。 MySQL的limit基本用法很簡單。limit接收1或2個整數(shù)型參數(shù),如果是2個參數(shù),第一個是指定第一個返回記錄行的偏移量,第二個是返回記錄行的最大數(shù)目。...

    Arno 評論0 收藏0
  • 4.2 數(shù)據(jù)庫表/Sequelize Mysql-博客后端Api-NodeJs+Express+My

    功能梳理完了以后,咱們就可以開始數(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...

    nicercode 評論0 收藏0
  • yii2 ActiveRecord多表關(guān)聯(lián)以及多表關(guān)聯(lián)搜索的實現(xiàn)

    摘要:今天把這個問題講明白了,看看是怎么個多表關(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)作者同意必須保留...

    venmos 評論0 收藏0

發(fā)表評論

0條評論

guyan0319

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<