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