2015-02-09 83 views
0

我有一个带有“产品”表和许多列的MySQL数据库。MySQL:自动数据操作

我有一个名为name有总是名称,结构类似这样的柱: 例如

GD 0001/PL40 
GD 0034/PL60 
GD 0106/PL30 
GD 0122/2S 

在同一个表products我有另一列,image。 可以依据字段products自动填写该字段吗?

我想获得这样的结果:

gd0001_pl40.jpg 
gd0034_pl40.jpg 
gd0106_pl30.jpg 
gd0122_2s.jpg 

如果有必要,我可以使用PHP或SQL

谢谢你,希望我的问题是可以理解的

+0

检查我的解决方案,我测试了它。 – 2015-02-09 07:36:50

回答

2

要具有实际值转换,首先运行该SQL:

UPDATE products SET 
image=LOWER(CONCAT(REPLACE((REPLACE(name," ","")),'/','_'),'','.jpg')); 

如果你想总的自动转换后,可以克里特两个触发器,这会为你做它在INSERT和UPDATE:

DELIMITER ;; 

CREATE TRIGGER products_ins BEFORE INSERT ON products 
FOR EACH ROW 
BEGIN 
    NEW.image = LOWER(CONCAT(REPLACE((REPLACE(NEW.name," ","")),'/','_'),'','.jpg')); 
END; 

CREATE TRIGGER products_ins BEFORE UPDATE ON products 
FOR EACH ROW 
BEGIN 
    NEW.image = LOWER(CONCAT(REPLACE((REPLACE(NEW.name," ","")),'/','_'),'','.jpg')); 
END; 

DELIMITER ; 

这样,如果您更新您的name字段,您的image字段将自动更新。

+0

谢谢!它很棒! ;) – 2015-02-09 08:08:15

3
  1. 空替换空间空间
  2. 替换/带有_
  3. concat .jpg在结尾

使用select concat(REPLACE((REPLACE(column_name," ","")),'/','_'),'','.jpg') from table_name

您可以添加一个功能,这整个字符串转换为小的情况下,你 可以做,在mysql中,以及在应用层PHP

+0

不妨使用['LCASE'](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lcase)函数。 – 2015-02-09 07:45:28

+0

如果您不想一次又一次地显式写入,您可以将其放入视图中。 – frlan 2015-02-09 07:45:31

+0

@frlan这是不是真的巨大的一次又一次计算:)我想最好是这样称呼它,因为它是为了避免头顶上..可能他只会打电话给它看一次任何报告.. – 2015-02-09 07:46:56

0

你需要编写你自己的逻辑来获得这个。你可以使用javascript或java(String replace(),split())方法。