Función strtr en mysql para poder hacer replace de varios caracteres

Hoy estaba haciendo un tema de url amigables (friendly-url) y no quería hacer un script en php que se conectase a base de datos así que decidir hacer solamente con MYSQL

Para ello necesitaba una función que me resolvieses el tema que hace strtr en php así que busque un poco por la web y encontre este bonita función de mysql


-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: El equivalente a strtr en php
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` FUNCTION `tr`(`str` TEXT, `dict_from` VARCHAR(1024), `dict_to` VARCHAR(1024)) RETURNS text CHARSET utf8
    NO SQL
    DETERMINISTIC
    SQL SECURITY INVOKER
BEGIN
 DECLARE len INTEGER;
 DECLARE i INTEGER;

 IF dict_to IS NOT NULL AND (CHAR_LENGTH(dict_from) != CHAR_LENGTH(dict_to)) THEN
  SET @error = CONCAT('Length of dicts does not match.');
  SIGNAL SQLSTATE '49999'
   SET MESSAGE_TEXT = @error;
 END IF;

 SET len = CHAR_LENGTH(dict_from);
 SET i = 1;

 WHILE len >= i  DO
  SET @f = SUBSTR(dict_from, i, 1);
  SET @t = IF(dict_to IS NULL, '', SUBSTR(dict_to, i, 1));

  SET str = REPLACE(str, @f, @t);
  SET i = i + 1;

 END WHILE;

 RETURN str;
END

Despues de esto ya sólo necesito unos cuantos replace para quitar ciertas cosas, como conjunciones y demás farfulla

update menu_items
set slug =
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
LOWER(tr(nombre,

"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ· /",

"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---")),')',''),'(',''),'--','-' ),'-y-','-'),'-de-','-'),'-para-','-'),'--','-' ),'-e-','-')

Espero que os ayude a mi me ha resultado rapido y comodo

Comentarios