LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4069|回复: 5

MySQL中如何合并字段?

[复制链接]
发表于 2005-11-4 10:51:20 | 显示全部楼层 |阅读模式
数据库表network_info中有字段例如
ip_address=192。168。0。10
ip_address_class_a =192
ip_address_class_b = 168
ip_address_class_c= 0
ip_address_class_d=10

想要改动表中 ip_address_class_a ,ip_address_class_b,ip_address_class_c,ip_address_class_d
的数值这不困难,如何能够让ip_address对后面的进行字段合并呢?用+肯定是不成的。该如何做呢?

ip_address vchar
ip_address_class_a(b,c,d) init 3
发表于 2005-11-7 23:08:40 | 显示全部楼层
合并本身很简单的,MySQL提供concat/concat_ws函数,具体用法见文档。
如果你还需要同步更新,一个方法是每次手动同步,另一个方法是使用trigger,但是需要MySQL 5.0以上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-8 12:12:10 | 显示全部楼层
多谢,不过已经放弃了这个想法。因为不是换一个两个字段,整个ip段都要换。所以找到了更方便的途径

CREATE TABLE `customer_network_temp` (   `customer_id` int(10) NOT NULL default '0',  `ip_address` varchar(20) NOT NULL default '', `ip_address_class_a` int(3) NOT NULL default '0', `ip_address_class_b` int(3) NOT NULL default '0', `ip_address_class_c` int(3) NOT NULL default '0',  `ip_address_class_d` int(3) NOT NULL default '0');           

LOAD DATA INFILE 'all.txt' INTO TABLE customer_network_temp FIELDS TERMINATED BY " ";

这样读取到一个表然后再update另外一个表更快些。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-8 12:27:20 | 显示全部楼层
select customer_id,CONCAT_WS('.',ip_address_class_a,ip_address_class_b,ip_address_class_c,ip_address_class_d) from customer_network_temp;

我在想一个问题,就是如果用这个select出来的ip,update别的表还是很麻烦,看来还是读取一个文件在update省事些,而且我觉得我下面如果这么做肯定是错误的。
update customer_network_info n ,customer_network_temp t set n.ip_address=t.ip_address where t.ip_address in (CONCAT_WS('.',ip_address_class_a,ip_address_class_b,ip_address_class_c,ip_address_class_d) ) and n.customer_id=t.customer_id;
回复 支持 反对

使用道具 举报

发表于 2005-11-8 14:26:10 | 显示全部楼层
concat(field,field)

好象字段是不能合并的,字段值可以用concat函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-8 17:51:05 | 显示全部楼层
字段可以合并,如下即可

select CONCAT_WS('.',ip_address_class_a,ip_address_class_b,ip_address_class_c,ip_address_class_d);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表