mysql in 多个字段_MySQL如何同时自增自减多个字段
本文將帶大家聊一下如何同時(shí)自增自減多個(gè)字段
”前言
最近小Q同學(xué)去面試了,然后就問了題目的問題,如何同時(shí)自增自減多個(gè)字段。
小Q一時(shí)回答不出來,最終的結(jié)果就是回家等通知....
關(guān)于這個(gè)問題咔咔來給小Q簡單的進(jìn)行解答一下。
一、ThinkPHP框架實(shí)現(xiàn)
小Q最熟悉的框架就是ThinkPHP,那么咔咔就先使用ThinkPHP來解決這個(gè)問題。
首先,解決這個(gè)問題需要對框架的inc和setInc有一定的了解,在框架中也就是使用這倆個(gè)函數(shù)進(jìn)行自增或者自減的。
但是倆者是有區(qū)別的,inc是Db類中的方法,setInc實(shí)際調(diào)用的是模型中的方法,但是最終都使用的是thinkphp/library/think/db/Query.php這個(gè)文件的方法。
這一塊的源碼咔咔就不看了,后邊在說吧!先解決當(dāng)下問題,小Q很著急的。
大家在寫自增的方法時(shí)會(huì)不會(huì)跟小Q一樣一直都使用的是setInc,小Q拿到這個(gè)問題時(shí)是這樣想的。
初步方案當(dāng)訪問時(shí)會(huì)無情的出現(xiàn)給小Q一個(gè)沉痛一擊。
報(bào)錯(cuò)信息于是這種方式是不可行的,但是還是想實(shí)現(xiàn)這個(gè)功能怎么辦呢!
不著急咔咔帶你訪問新大陸。
直接使用倆個(gè)inc方法來進(jìn)行對多字段自增或者自減,那么咔咔這個(gè)思路也是簡單的看源碼來的。
最終方案又或者大家應(yīng)該都在使用thinkphp框架時(shí)都在一個(gè)查詢中使用過倆個(gè)where方法吧!其實(shí)思路都一樣既然倆個(gè)where都可以實(shí)現(xiàn)查詢。
那么那倆個(gè)inc應(yīng)該也會(huì)是可以實(shí)現(xiàn)多個(gè)字段進(jìn)行自增或者自減的。
所以說咔咔最后的解決方案就是如上圖的解決方案。
二、翻騰一下源碼
在這個(gè)過程中咔咔還是去無聊的翻騰了一下關(guān)于inc的實(shí)現(xiàn)過程。
在下圖中主要看關(guān)于參數(shù)給予的解釋,可以看到第一個(gè)參數(shù)是可以為數(shù)組或者字符串的。
但是在根據(jù)代碼會(huì)發(fā)現(xiàn),雖然支持多個(gè)字段自增或者自減但是步長卻是一個(gè)值。
所以說框架給提供的這個(gè)方法是可以同時(shí)自增或者自減多個(gè)字段,但是值只能是固定的。
inc的源碼如果想要實(shí)現(xiàn)多個(gè)字段多個(gè)步長就需要來修改源碼來解決這個(gè)問題。
例如想實(shí)現(xiàn)多個(gè)字段對應(yīng)多個(gè)步長以下是咔咔修改源碼后的內(nèi)容,可以跟inc源碼那一幅圖做對比。
咔咔修改的源碼主要為圈到的地方,因?yàn)閟tep這個(gè)值在源碼中是直接給定義為1了。
所以就需要修改這一塊,使用is_array來進(jìn)行檢測這個(gè)變量是否為數(shù)組就可以了。
修改源碼經(jīng)過以上的操作就可以實(shí)現(xiàn)針對多個(gè)字段多個(gè)步長進(jìn)行自增或者自減了。
咔咔這種直接修改源碼是不建議大家借鑒的,只是針對一個(gè)問題我們要學(xué)會(huì)去在源碼中找到解決方案。
所以說針對如何同時(shí)自增自減多個(gè)字段這個(gè)問題咔咔還是建議使用方案一的解決方法。
畢竟這種情況是屬于少數(shù)的,在框架基礎(chǔ)改著改著自己都會(huì)亂。
三、使用SQL語句進(jìn)行實(shí)現(xiàn)
如果為了解決問題這一節(jié)的內(nèi)容就不用在看了,看第一節(jié)就可以完美的解決你的問題了。
咔咔是喜歡琢磨一個(gè)問題使用多種方案進(jìn)行解決。
那么接下來咔咔再使用SQL語句對這個(gè)問題進(jìn)行深度的解析。
既然咱們都已經(jīng)在第一節(jié)中將實(shí)現(xiàn)方案都已經(jīng)實(shí)現(xiàn)了,在框架中有一個(gè)方法fetchSql(),可以直接打印出sql語句。
那么就來看一下這個(gè)sql語句是什么樣的。
UPDATE?`table`??SET?`filed1`?=?`filed1`?+?200?,?`filed2`?=?`filed2`?+?86??WHERE??`time`?BETWEEN?1609689600?AND?1609775999
以上就是使用框架提供的方法打印出的SQL語句,表名和字段咔咔都做了更改,直接修改為自己需要自增或者自減的字段即可。
原生SQL實(shí)現(xiàn)方案使用這個(gè)SQL語句是可以解決本文主題的,所以咔咔就沒有給出打印結(jié)果一系列的截圖,如果感興趣的可以去自己測試一下。
俗話說的好,光說不練假把式,還是需要自己進(jìn)行多多練習(xí)的。
以上就是使用原生sql在框架中實(shí)現(xiàn)的同時(shí)自增自減多個(gè)字段并且多個(gè)步長。
四、總結(jié)
這個(gè)問題其實(shí)本質(zhì)很簡單,框架也給提供了對應(yīng)的方法,只需要直接調(diào)用就行了。
問題難在就是對框架給提供的自增或者自減的方法你知道幾個(gè),框架給提供了inc和setInc這個(gè)倆種方式。
如果你只知道setInc那豈不是就吉吉思密達(dá)了,所以沒事還是多看看源碼和文檔,對你只有好處沒有壞處。
還有一個(gè)問題就是關(guān)于咔咔在文章中提到了使用新的方式來實(shí)現(xiàn)同時(shí)自增自減多個(gè)字段,這種方式在框架底層進(jìn)行了修改。
這種實(shí)現(xiàn)方式不推薦使用,修改源碼只是為了測試,也是對自己閱讀源碼的能力進(jìn)行提升,而不是在框架底層無所畏懼的進(jìn)行修改。
“堅(jiān)持學(xué)習(xí)、堅(jiān)持寫博、堅(jiān)持分享是咔咔從業(yè)以來一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。
”總結(jié)
以上是生活随笔為你收集整理的mysql in 多个字段_MySQL如何同时自增自减多个字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java c s是什么_Java在C/S
- 下一篇: linux标准i o实例,9.3. 一个