Добрый день. Есть такая задача. При добавлении значений в таблицу одно из полей пересортировывать и добавлять триггером в другую ячейку.
То есть, есть поле в котором находится текст - "Один Два Три Четыре"
Должно произойти преобразование и получиться на выходе - "Два Один Три Четыре" (То есть по алфавиту)
В Mysql таких функций нет, пробую написать свою. PHP не используется, все делается средствами базы.
DELIMITER $$
CREATE FUNCTION `SORT_STR`(`string1` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE i INT(2) Default 0;
DECLARE sort VARCHAR(255);
DECLARE union_str VARCHAR(255);
DECLARE str1 VARCHAR(255);
DECLARE word VARCHAR(255);
SET str1 = string1;
sub_str_loop: LOOP
SET i=i+1;
SET word = SUBSTRING_INDEX(str1,' ', 1);
SET str1 = trim(replace(str1, word, ''));
IF i = 1 THEN
SET union_str = concat('select ',word,' as words');
ELSE
SET union_str = concat(union_str, ' UNION select ',word);
END IF;
IF str1 = '' THEN
LEAVE sub_str_loop;
END IF;
END LOOP sub_str_loop;
select group_concat(`words` ORDER BY `words` asc SEPARATOR ' ') as words into sort from (union_str);
RETURN union_str;
END
Последовательность такова. Я разбираю строку, составляю запрос который мне все эти слова выведет как строки, их отсортирует и выведет в ответ.
В цикле у меня получается такая конструкция
SELECT 'Один' as words
UNION SELECT 'Два'
UNION SELECT 'Три'
UNION SELECT 'Четыре'
Но в финале когда эта конструкция должна вставиться в финальный запрос
select group_concat(`words` ORDER BY `words` asc SEPARATOR ' ') as words into sort from <i><b>(union_str);</b></i>
Я получаю ошибку при выполнении.
В запросе моя переменная интерпретируется как имя таблицы. и Совсем не хочет вставляться текстом. Как это исправить можно ?
Если есть другое решение этой задачи буду рад выслушать вас.