我需要将一些域名更改为包含电子邮件地址(主键)的表格
我尝试提取(使用select
)我需要更新的字段:
SELECT `Email`, CONCAT(
SUBSTRING_INDEX(`Email`, '@olddomain.', 1),
'@newdomain.',
SUBSTRING_INDEX(`Email`, '@olddomain.', -1)) AS NewMail
FROM `mailaddresses`
WHERE INSTR(`Email`,'@olddomain.')>0
这很好用,给我新旧电子邮件。
按照返回数据的示例进行操作:
EMail NewMail
123@olddomain.com 123@newdomain.com
456@olddomain.com 456@newdomain.com
789@olddomain.com 789@newdomain.com
所以我尝试使用以下查询进行更新:
UPDATE `mailaddresses`
SET `Email` = CONCAT(
SUBSTRING_INDEX(`Email`, '@olddomain.', 1),
'@newdomain.',
SUBSTRING_INDEX(`Email`, '@olddomain.', -1))
WHERE INSTR(`Email`, '@olddomain.')>0
但是phpMyAdmin说有一个SQL语法错误。
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法 靠近'1)'@ newdomain。' SUBSTRING_INDEX(
mailaddresses
第2行
我注意到错误消息中缺少两个逗号','所以我认为phpMyAdmin正在做一些令人讨厌的事情。
修改:
我意识到我的SQL代码完全正常工作,因为我在MySQL控制台上测试它并且它工作正常。我认为我有PhpMyAdmin的问题(我不知道会出现什么样的问题)。
这里来自我的Xampp / PhpMyAdmin主页的一些数据:
数据库服务器
服务器:127.0.0.1通过TCP / IP
服务器类型:MySQL
服务器版本:5.6.24 - MySQL社区服务器(GPL)
协议版本:10
Web服务器
Apache / 2.4.12(Win32)OpenSSL / 1.0.1l PHP / 5.6.8
数据库客户端版本:libmysql - mysqlnd 5.0.11-dev - 20120503 - $ Id:3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $
PHP扩展:mysqli
phpMyAdmin的
版本信息:4.3.11
我很确定这是因为我从vb.net运行了我的SQL代码并且它有效。
所以我的问题是:
有没有人遇到过同样的问题?
我该如何解决这个问题?
答案 0 :(得分:0)
您可以使用REPLACE(str,from_str,to_str)
字符串函数来更改任何字段值的一部分...
UPDATE mailaddresses
SET email = REPLACE( email, '@olddomain.', '@newdomain' )
WHERE INSTR( email, '@olddomain.' ) > 0
示例:
mysql> set @olddomain = '@google.com';
Query OK, 0 rows affected (0.00 sec)
mysql> set @newdomain = '@gmail.com';
Query OK, 0 rows affected (0.00 sec)
mysql> set @email = 'rr.arepally@google.com';
Query OK, 0 rows affected (0.00 sec)
mysql> select replace( @email, @olddomain, @newdomain ) as modified_email;
+-----------------------+
| modified_email |
+-----------------------+
| rr.arepally@gmail.com |
+-----------------------+
1 row in set (0.00 sec)
mysql>
答案 1 :(得分:0)
从您的问题看,您使用过时版本的phpMyAdmin加上同样的查询在MySQL控制台本身上运行时显然有效。因此,我建议您将phpMyAdmin更新到其最新版本。写作的那一刻是v4.5.4.1。
这里是changelogs。