最近遇到一點麻煩事,新安裝的PHPwind6.0正式版社區在匯入之前的會員帳號資料時,發現很多會員的mail地址貌似胡亂填寫的,之前的PHPwind5.5版本沒有開啟mail地址驗證功能,所以估計很多使用者胡亂填寫了email地址,所以我就想要求所有正式會員重新驗證郵件地址來重新啟用會員帳號,結果發現社區根本沒有這項功能,掙紮了N久,資料庫的會員資料資料表被反覆安裝=刪除了好幾遍,總算找到了一個批量修改的方法。
不過這樣操作會連社區建立者的帳號都改成未啟用,所以要是不清楚還真的不敢動手。
在PHPwind6.0的MySql資料庫裡,它的會員資料存在pw_members裡面,會員帳號正常狀態下這個資料表裡的“yz”欄位顯示的值是1(即表示已經啟用了帳號)。如果需要再次郵件啟用,則這個值顯示的內容必須與另一個欄位"regdate"的值相同,程式在驗證時自動檢測兩個欄位的內容是否完全一樣之後才會進行有效驗證,否則會給出參數錯誤的提示。例如會員UID 1的“regdate”欄位內容是1194067635,那麼“yz”欄位的值也一樣是1194067635;以此類推,如果會員UID 2的“regdate”欄位內容是1175320740,那麼“yz”欄位的值也一樣是1175320740...
此時,由於可能的各種原因,“yz”欄位的值可能並不是都是1(即表示已經啟用了帳號)的狀態,如何讓“yz”欄位的值和“regdate”欄位內容保持一致呢?同時,因為會員資料N多,又如何批量轉換所有會員帳號的這個欄位值呢?
我用的方法是這樣的
UPDATE table SET 被替換的欄位名=被複製的欄位名
應用到本文執行個體:
UPDATE pw_members SET yz=regdate
其中“pw_members”是資料表名稱;“被替換的欄位名”指的是在“pw_members”中你要修改的那個欄位的名稱,這裡是“yz”;而“被複製的欄位名”指的是提供欄位內容給“yz”欄位複製的欄位名(好拗口喲!)“regdate”;這樣可以批量將每個UID內的“yz”修改並複製成和“regdate”相同的值。而會員在下次登陸時社區就會要求他再次啟用郵件帳號。
由於此舉是批量修改,因為將會把包括社區建立者在內的所有帳號都改成未啟用,所以當執行完了以後,要立即把包括社區建立者在內不需要啟用的帳號改回正常狀態。方法是在pw_members資料表的瀏覽狀態下,選擇你要改回正常狀態的會員帳號,點擊“編輯”進入之後找到“yz”欄位,將欄位的值例如“1194067635”改成“1”,這樣這個會員帳號就恢複正常了;也可以用管理員帳號進入社區管理後台“會員管理”裡將需要的會員ID手動啟用。
另外,如何手動將同一資料表內不同欄位之間的內容批量轉換,可以參考下面的命令:
UPDATE table set 欄位名=REPLACE(欄位名,'原字串','替換的字串') where 已知的欄位名 LIKE '%原字串%'
應用到本文執行個體:
UPDATE pw_members set yz=REPLACE(yz,'1','2') where yz LIKE '%1%'
其中“pw_members”是資料表名稱;“欄位名”指的是在“pw_members”中你要修改的那個欄位的名稱,這裡是“yz”;“原字串”是欄位“yz”現在預設的值“1”;而“替換的字串”指的是你將要修改的欄位“yz”新的預設值“2”。
如何批量將某個或某幾個欄位的數值清空?
UPDATE table set 欄位名= '0' 清空欄位數值
應用到本文執行個體:
UPDATE pw_memberdata set money= '0' 清空金幣
UPDATE pw_memberdata set rvrc= '0' 清空威望
UPDATE pw_memberdata set credit= '0' 清空貢獻值
UPDATE pw_memberdata set currency= '0' 清空交易幣
UPDATE pw_memberinfo set deposit= '0' 清空活期存款
UPDATE pw_memberinfo set ddeposit= '0' 清空定期存款
UPDATE pw_membercredit set value= '0' 清空好評度
閃電部落格評:文章網上找的,我的實際用法
mysql 更新(清空)某表某一欄位內容:update 表名 set 欄位名='',並沒有0。