最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用squirrel進(jìn)行sql拼接不生效問(wèn)題及解決

 更新時(shí)間:2023年09月18日 10:53:57   作者:love666666shen  
這篇文章主要介紹了使用squirrel進(jìn)行sql拼接不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用squirrel拼接sql不生效

拼接sql的時(shí)候,一般使用同一個(gè)變量不斷拼接連接。

但是,在使用github.com/Masterminds/squirrel包進(jìn)行sql拼接時(shí),

需要多加注意:在使用變量添加sql語(yǔ)句后,還需要重新再賦值給該變量,否則達(dá)不到想要的結(jié)果。

如下代碼:

import 	sq "github.com/Masterminds/squirrel"
func FindProviderProduct(providerID int, keyWord string) (products []*ProductInfo, err error) {
	db, err := GetDB()
	if err != nil {
		return
	}
	buffer := sq.Select("PP.product_id", "P.product_name").From("provider_product as PP").
		LeftJoin("provider as PV on PV.id = PP.provider_id").
		LeftJoin("product as P on P.id = PP.product_id").
		Where(sq.Eq{"P.is_deleted": 0, "PV.is_deleted": 0})
	if providerID != 0 {
		buffer.Where(sq.Eq{"PP.provider_id": providerID})     // 這里拼接完sql后,沒(méi)有重新賦值給buffer變量,相當(dāng)于這句sql沒(méi)有拼接到原buffer語(yǔ)句中
	}
	keyWord = easy.ReplaceSpecialStr(keyWord)
	if len(keyWord) != 0 {
		buffer.Where(sq.Like{"P.product_name": keyWord})   // 這里拼接完sql后,沒(méi)有重新賦值給buffer變量,相當(dāng)于這句sql沒(méi)有拼接到原buffer語(yǔ)句中
	}
	sqlStr, args, _ := buffer.ToSql()
	if err = db.Debug().Raw(sqlStr, args...).Find(&products).Error; err != nil {
		return
	}
	return
}

上面的代碼,在進(jìn)行如下賦值后:

buffer := sq.Select("PP.product_id", "P.product_name").From("provider_product as PP").
		LeftJoin("provider as PV on PV.id = PP.provider_id").
		LeftJoin("product as P on P.id = PP.product_id").
		Where(sq.Eq{"P.is_deleted": 0, "PV.is_deleted": 0})

即使,后面的兩個(gè)if語(yǔ)句滿足條件,但是沒(méi)有將其中的sql重新賦值給buffer變量,也不會(huì)把if里面的篩選條件添加到buffer中,

最終的sql結(jié)果僅僅是如下sql:

SELECT PP.product_id, P.product_name
FROM provider_product as PP
LEFT JOIN provider as PV on PV.id = PP.provider_id
LEFT JOIN product as P on P.id = PP.product_id
WHERE P.is_deleted = 0 AND PV.is_deleted = 0;

解決方式

在兩個(gè)if條件中,處于使用buffer繼續(xù)添加篩選條件外,還需要將添加后的篩選條件重新賦值給buffer變量即可。

修改后的代碼如下:

import 	sq "github.com/Masterminds/squirrel"
func FindProviderProduct(providerID int, keyWord string) (products []*ProductInfo, err error) {
	db, err := GetDB()
	if err != nil {
		return
	}
	buffer := sq.Select("PP.product_id", "P.product_name").From("provider_product as PP").
		LeftJoin("provider as PV on PV.id = PP.provider_id").
		LeftJoin("product as P on P.id = PP.product_id").
		Where(sq.Eq{"P.is_deleted": 0, "PV.is_deleted": 0})
	if providerID != 0 {
		buffer = buffer.Where(sq.Eq{"PP.provider_id": providerID})   // 這里在使用buffer拼接后,需要重新賦值給buffer
	}
	keyWord = easy.ReplaceSpecialStr(keyWord)
	if len(keyWord) != 0 {
		buffer = buffer.Where(sq.Like{"P.product_name": keyWord}) // 這里在使用buffer拼接后,需要重新賦值給buffer
	}
	sqlStr, args, _ := buffer.ToSql()
	if err = db.Debug().Raw(sqlStr, args...).Find(&products).Error; err != nil {
		return
	}
	return
}

使用squirrel中的First

squirrel中的First取1條查詢數(shù)據(jù),相當(dāng)于在查詢結(jié)果中添加limit 1。

例如,現(xiàn)有如下sql拼接:

SELECT IFNULL(MAX(update_time), 0) as max_update_time FROM product WHERE user_id = xxx AND product_status IN (1,2) 

現(xiàn)對(duì)如上sql使用First方法,相當(dāng)于:

SELECT IFNULL(MAX(update_time), 0) as max_update_time FROM product WHERE user_id = xxx AND product_status IN (1,2)  LIMIT 1

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL5.7.18下載和安裝過(guò)程圖文詳解

    MySQL5.7.18下載和安裝過(guò)程圖文詳解

    本文通過(guò)圖文并茂的形式給大家介紹了MySQL5.7.18下載和安裝過(guò)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-07-07
  • mysql中的7種日志小結(jié)

    mysql中的7種日志小結(jié)

    這篇文章主要介紹了mysql中的7種日志小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 數(shù)據(jù)庫(kù)中的sql完整性約束語(yǔ)句解析

    數(shù)據(jù)庫(kù)中的sql完整性約束語(yǔ)句解析

    這篇文章主要介紹了數(shù)據(jù)庫(kù)中的sql完整性約束語(yǔ)句解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • phpstudy無(wú)法啟動(dòng)MySQL服務(wù)的完美解決辦法

    phpstudy無(wú)法啟動(dòng)MySQL服務(wù)的完美解決辦法

    學(xué)習(xí)php當(dāng)然是要先安裝好運(yùn)行環(huán)境了,phpstyudy是一個(gè)運(yùn)行php的集成環(huán)境,一鍵安裝對(duì)新手很友好,下面這篇文章主要給大家介紹了關(guān)于phpstudy無(wú)法啟動(dòng)MySQL服務(wù)的完美解決辦法,需要的朋友可以參考下
    2022-06-06
  • MySQL服務(wù)器 IO 100%的分析與優(yōu)化方案

    MySQL服務(wù)器 IO 100%的分析與優(yōu)化方案

    這篇文章主要給大家介紹了關(guān)于MySQL服務(wù)器 IO 100%的相關(guān)資料,文中通過(guò)示例代碼介紹的介紹非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法

    ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法

    昨天又遇到了MySQL數(shù)據(jù)庫(kù)無(wú)法重啟的問(wèn)題,還以為是權(quán)限的原因,后來(lái)發(fā)現(xiàn)提示是因?yàn)榇疟P(pán)空間不足導(dǎo)致的,通過(guò)查找相關(guān)資料得以解決了,所以下面這篇文章主要介紹了ubuntu下磁盤(pán)空間不足導(dǎo)致mysql無(wú)法啟動(dòng)的解決方法,需要的朋友可以參考下。
    2017-03-03
  • mysql8.0無(wú)法使用group by的問(wèn)題及解決

    mysql8.0無(wú)法使用group by的問(wèn)題及解決

    這篇文章主要介紹了mysql8.0無(wú)法使用group by的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)

    MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Mysql如何適當(dāng)?shù)奶砑铀饕榻B

    Mysql如何適當(dāng)?shù)奶砑铀饕榻B

    今天小編就為大家分享一篇關(guān)于Mysql如何適當(dāng)?shù)奶砑铀饕榻B,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • mysql 查看版本的方法圖文演示

    mysql 查看版本的方法圖文演示

    今天打算升級(jí)下mysql數(shù)據(jù)庫(kù),可不知道現(xiàn)在的版本是多少,從網(wǎng)上找了一些資料,發(fā)現(xiàn)還是這些好用。
    2010-04-04

最新評(píng)論

桃源县| 来宾市| 长兴县| 璧山县| 武川县| 中宁县| 尉犁县| 泸溪县| 吉林省| 新疆| 施秉县| 安龙县| 普陀区| 肃南| 陆河县| 遂昌县| 鄂托克旗| 恭城| 鄂州市| 隆尧县| 保山市| 兴业县| 邯郸县| 京山县| 正宁县| 漳浦县| 化隆| 牡丹江市| 万山特区| 宿州市| 家居| 苍梧县| 临夏市| 侯马市| 江山市| 台东市| 抚州市| 镇雄县| 西藏| 中牟县| 连平县|