2016-08-10 2 views
1

У меня есть база данных в mysql & поддерживают 3 столбца, т. Е. ID, имя, slug.добавление тире между пробелами в имени поля в mysql

Столбцы слива такие же как имя но здесь я положил комбинацию колонки имени. Предположим, если имя Микки Мехта, то в slug, я хочу, чтобы он показывал micky-mehta. В slug я хочу все по-маленьким буквам &, если пространство тогда должно быть заменено тире. Все это, потому что я хочу SEO дружественный URL для моего сайта. Теперь я могу сделать это с помощью программы, когда новые продукты будут добавлены, но это также возможно. Если я могу напрямую сделать это с помощью mySQL? Я имею в виду, есть ли какая-нибудь функция в mySQL, которая выполняет такую ​​задачу?

ответ

2

Вы можете обновить данные, чтобы соответствовать вашей схеме:

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), ' ', '-') 
); 
+0

Спасибо, Билл. Это именно то, что я хотел – SUN

+0

. Выполняя этот запрос, он показывает: «У вас нет привилегии SUPER, и двоичный журнал включен (вы можете * хотеть используйте менее безопасную переменную log_bin_trust_function_creators) ". – SUN

+0

Я предполагаю, что вы используете Amazon RDS. Это отключает создание триггеров по умолчанию, но вы можете изменить параметр конфигурации, чтобы разрешить его. Прочтите https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/ –

0

Try This ПРИМЕР-

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

Нет необходимости указывать идентификатор, если вы хотите заменить все столбцы. – prograshid

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 является автоматическое приращение столбец.

+0

Обратитесь к ответу Билла Карвина, потому что это потрясающе. –

Смежные вопросы