Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中字段名的空格之间添加破折号_Mysql_Sql - Fatal编程技术网

在mysql中字段名的空格之间添加破折号

在mysql中字段名的空格之间添加破折号,mysql,sql,Mysql,Sql,我在mysql中有数据库,并维护3列,即ID、名称、slug Slug列和name列相同,但这里我把name列的组合放在这里。假设如果名字是米奇·梅塔,那么在《我想要的鼻涕虫》中,它应该显示米奇·梅塔。在slug中,我希望所有内容都是小写字母&如果是空格,那么应该用破折号代替。所有这一切,因为我想为我的网站搜索引擎优化友好的网址。现在我可以在添加新产品时使用该程序,但如果我可以直接使用mySQL,是否也可以这样做?我的意思是mySQL中有执行这种任务的函数吗?试试这个 范例- 您可以更新数据以适

我在mysql中有数据库,并维护3列,即ID、名称、slug

Slug列和name列相同,但这里我把name列的组合放在这里。假设如果名字是米奇·梅塔,那么在《我想要的鼻涕虫》中,它应该显示米奇·梅塔。在slug中,我希望所有内容都是小写字母&如果是空格,那么应该用破折号代替。所有这一切,因为我想为我的网站搜索引擎优化友好的网址。现在我可以在添加新产品时使用该程序,但如果我可以直接使用mySQL,是否也可以这样做?我的意思是mySQL中有执行这种任务的函数吗?

试试这个 范例-


您可以更新数据以适合您的方案:

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), ' ', '-');
CREATE TABLE mytable (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  slug VARCHAR(100) AS (REPLACE(LOWER(name), ' ', '-')
);
在MySQL 5.7中,它们现在有了,因此您可以在不编写触发器的情况下执行相同的操作:

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), ' ', '-');
CREATE TABLE mytable (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  slug VARCHAR(100) AS (REPLACE(LOWER(name), ' ', '-')
);

您也可以使用编程语言来实现这一点。如果您是用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
是自动递增列)。

谢谢比尔。这正是我想要的。通过执行此查询,它显示“您没有超级权限,并且启用了二进制日志记录。”(您可能希望使用不太安全的log\u bin\u trust\u函数\u creators变量)。我猜您正在使用Amazon RDS。默认情况下,这会禁用触发器的创建,但您可以更改配置选项以允许它。阅读:这是付费服务吗?Amazon RDS是付费服务,是的。更改RDS中的配置选项不会更改成本。如果您要替换所有列,则无需指定id。请参阅Bill Karwin's答案是因为它太棒了。