在mysql中的字段名称中的空格之间添加短划线

时间:2016-08-10 04:24:06

标签: mysql sql

我在mysql&中有数据库保持3列,即ID,名称,slug。

Slug列和名称相同但是在这里我把名称栏的组合。假设如果名字是Micky Mehta然后在slug我希望它应该显示micky-mehta。在slug中,我希望所有的东西都是小写字母和如果空间那么它应该用短划线代替。所有这一切,因为我想要我的网站的SEO友好网址。现在我可以在添加新产品时使用程序执行此操作,但是它也可以使用mySQL直接执行此操作吗?我的意思是mySQL中有没有执行这种任务的函数?

3 个答案:

答案 0 :(得分:3)

您可以更新数据以适合您的计划:

UPDATE mytable SET slug = REPLACE(LOWER(name), ' ', '-');

如果您希望每次添加新行或更新现有行时都自动执行此操作,则可以使用触发器:

CREATE TRIGGER SetSlugIns BEFORE INSERT ON mytable
  FOR EACH ROW
  SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');

CREATE TRIGGER SetSlugUpd BEFORE UPDATE ON mytable
  FOR EACH ROW
  SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');

在MySQL 5.7中,他们现在有generated columns,所以你可以在不编写触发器的情况下做同样的事情:

CREATE TABLE mytable (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  slug VARCHAR(100) AS (REPLACE(LOWER(name), ' ', '-')
);

答案 1 :(得分:0)

试试这个 示例 -

UPDATE yourTable SET yourColumn = LOWER(replace('Your Value', ' ', '_')) 

答案 2 :(得分:0)

您也可以使用编程语言执行此操作。如果您使用php进行编码,可以按照以下方式进行编码 拿一个新变量说$slug

$name='Jone Doe'; //the name value you getting from form or input

//convert string into lower. It will give you 'jon doe'
$nameInLower = strtolower($name); 

// now replace space with hyphen.
$slug=str_replace(' ', '-',$nameInLower);

在数据库表中插入$slug变量以及name列(考虑id是自动递增列。