位 mysql 查詢 Mysql 查詢 按位運算

2021-10-19 04:48:37 字數 1974 閱讀 4413

前言:雖說這是件小事兒,但本寶寶思前想後,還是為它留下一筆,嘿嘿。反正寫部落格不浪費紙和筆!好久沒有開啟我的逗比模式了,我親愛的乖徒弟dba,dbb,dbaa等,好久不見你們,遙祝幸福快樂+db。

整個事情其實使這樣的,最近的專案中,有乙個表,最終是這樣的:一共3位,每一位的取值是1和0(額,後來還有2,哈哈哈),1代表已認證,0代表未認證。 當時為什麼這麼設計呢,是因為會高頻率的出現  *** 身份已認證、郵箱已認證等等的打標籤,就把之前的三個字段變成了乙個,當時說是按位取值運算(怎奈何,功力不到位,咱們說的按位取值運算,壓根兒不是乙個頻道哇,尷尬5秒中)

附錄:本寶寶的頻道:不是有3位嘛,我乙個乙個字元的擷取,1就是已認證,0就是未認證。嗯,這就是傳說中的按位取值運算!

一、問題出現過程

上文也說到了當初這個字段為什麼這麼設計的,但在用的過程中,就出現了這麼個問題(別笑我,雖然我現在想想當時的邏輯,我也挺想笑的,所以,實在想笑,可別憋壞了) 當時有乙個查詢,每一種認證狀態都是乙個查詢條件,這個其實不重要。重要的是,每乙個條件都還有 「全部」 的選項。

本寶寶當時就在想啊,我呸,我就0和1,老娘哪兒去給你弄 全部,要麼未認證要麼已認證,老娘難道要3*3 組合排列 or + like **人的sql拼接嗎?我才不會告訴所有人,我真的拼過一次。 但結合到我蠢了n多年的經驗來看,我不會,我蠢,並不代表其他人也不會(每次團隊裡有我,誰都不用擔心智商墊底兒) 我就默默的問了我乙個同事,問如果是他,他會怎麼做。。。。。。呵 呵 噠 最終的結果是,在進度統計的時候,老大知道啦,剛開始我們說還是換成3個字段,老大說:不用,這個很好解決。

當時心裡那個恨呀,他知道怎麼做,但是不告訴我。 所幸,老大後來還是給了我一條生路+明路:位運算

二、位運算

話說,即使我明白了要用位運算,卻也是一波三折。因為其實,我就在想linux給檔案授權,每次打chmod 7的時候,就是全部許可權嘛,但其實是4+2+1得到的。 然後我就在測試我的那個認證狀態字段,發現乙個現象:我每次都不能用 status & 7 查出我期望的資料。 然後,就問我旁邊的老大了:為什麼我這條語句出不了效果呢,我查了查語法,沒錯啊,你看我都能單獨查出來。

老大看了看,就跟我說:你想想你的資料型別?   我當時就想的很簡單,因為是111這種格式的嘛,那這3個1其實轉成二進位制就是 4 2 1 ,完全沒問題 啊,為什麼就是查不出來呢,這個時候,剛好又遇到了另外乙個case,就是要授權和取消授權。 我當時就特別蒙,你說授權方便,我直接更改數值,但取消授權,我怎麼做呢?我當時想了好久都很苦惱,後來老大說:你就沒有理解什麼是位運算,好好想想。   後來我就想明白了:第一,我們當時用的資料型別是char,這本身就不對;第二,授權或者取消授權,只要加減對應的數值就ok了,做位運算的時候,會轉換成二進位制運算。所以,後來的處理方案是:

1,首先將char型別,轉換為了int;2,對應的語句大概是:查詢 where status & 1 ; set status=status+1 或者set status=status-1等。 舉個例子:我們設定1為個人認證;2為郵箱認證;4為渠道認證;8為主管理員認證;  那如果要查詢即通過個人認證(1),又通過了渠道認證(4)的資料,那麼語句應該是:where status & 5,直接將數值加起來作為條件。  最合適的模擬,我用到過得,也就只有linux的授權chmod了

附錄:具體的,隨便搜就能找到資料,我就不copy and paste了哈

三、個人總結

其實,寫這篇文章,最主要不是記錄這個位運算的具體查詢和使用,而是,老大明明就知道具體該怎麼做,然而,他為什麼沒有直接告訴我呢?  說實在的,這個東西當時也就卡著了,他老人家就看我在那兒折騰。 而且,我不會,還專門挑我去解決這個事兒。

其實,就突然想起來之前老大讓我去做乙個分享的時候,我們的一次對話:

老大:怎麼樣啊,7點就要開始了,你準備準備?

我:ppt就是那天早上給你看的,哎呀,不用準備的,我就是塊磚,主要的用途就是引出你這塊玉,我說不下去了,不是還有你頂著嘛,嘿嘿

老大:你應該想想自己怎麼能夠成為那塊玉,別把自己當磚使!  (ps: 也許,這就是領導和小兵的區別)

我,也要成為乙個被團隊依靠的人,加油!

mysql刪除查詢 MySQL 刪除查詢

如果想從 mysql 表中刪除記錄,就要用到 sql 命令 delete from 可以在命令列中使用該命令,也可以在 php 指令碼中使用它。語法格式 下面是利用 delete 命令刪除 mysql 表中資料的一般語法格式 delete from table name where clause 如...

mysql 慢查詢 MySQL慢查詢

一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...

mysql模糊查詢 MYSQL模糊查詢

mysql提供標準的sql模式匹配,以及一種基於象unix實用程式如vi grep和sed的擴充套件正規表示式模式匹配的格式。一 sql模式 sql的模式匹配允許你使用 匹配任何單個字元,而 匹配任意數目字元 包括零個字元 在 mysql中,sql的模式預設是忽略大小寫的。下面顯示一些例子。注意在你...