国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

guyan0319 / 2455人閱讀

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

相關(guān)文章

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

    摘要:?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ù)目。...

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

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

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

    摘要:今天把這個(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)作者同意必須保留...

    venmos 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<