我有一个带有表“产品”和很多列的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 :(得分:3)
使用select concat(REPLACE((REPLACE(column_name," ","")),'/','_'),'','.jpg') from table_name
您可以添加一个函数将整个字符串转换为小写字母 可以在mysql以及应用程序层的php中执行此操作
答案 1 :(得分: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
字段将自动更新。
答案 2 :(得分:0)
你需要编写自己的逻辑才能得到这个。你可以使用javascript或java(String replace(),split())方法。