更新字段

时间:2016-02-02 07:35:56

标签: mysql phpmyadmin updating

我需要将一些域名更改为包含电子邮件地址(主键)的表格 我尝试提取(使用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(Email'@ olddomain。',))FROM   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代码并且它有效。

所以我的问题是:
有没有人遇到过同样的问题? 我该如何解决这个问题?

2 个答案:

答案 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