powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / транскрипция в SELECT
18 сообщений из 18, страница 1 из 1
транскрипция в SELECT
    #38210492
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникла необходимость транскрибировать часть поля при запросе, а с какой стороны подойти к этому вопросу, чтобы было как можно менее затратно - ума не приложу. Поясню на примере:
есть текстовое поле Name в таблице names, значения которого такого вида: 15нл, 123жд, 900ф... До вчерашнего дня использовался такой запрос:
Select n.name from names n where....
Результатом было, естественно, значение поля без изменений. А вчера возникла необходимость кроме простого выдёргивания получать ещё и транскрибированные значения этого поля, т.е. чтобы вместо озвученных значений были вот такие: 15nl, 123zhd, 900f. Как этого достичь малой кровью? Была мысль создать таблицу транскрибирования (a=а, б=b, ... я=ya) - но как внутри запроса побуквенно выдёргивать это всё?
Заранее спасибо!
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38210536
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20но как внутри запроса побуквенно выдёргивать это всё?Написать свою функцию транскрибирования, потом
andrew_jr20Select n.name, transcribe(n.name) as name_t from names n where....
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38211075
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrew_jr20но как внутри запроса побуквенно выдёргивать это всё?Написать свою функцию транскрибирования, потом
andrew_jr20Select n.name, transcribe(n.name) as name_t from names n where....
Спасибо - получается, что я ошибся немного в формулировке, поискал примеры функции "транслитерирования", и нашёл как раз то, что нужно :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38211210
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20,

Интересно: нашли транслитерацию силами Мускуля или на клиенте?

А то я как раз вчера сделал запросом с разбором строки на символы и свертку обратной группировкой. :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38211334
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109сделал запросом с разбором строки на символы и свертку обратной группировкой
В соответствии с ГОСТ 7.79-2001? так выложил бы код - на FAQ тянет...
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38211574
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109andrew_jr20,

Интересно: нашли транслитерацию силами Мускуля или на клиенте?

А то я как раз вчера сделал запросом с разбором строки на символы и свертку обратной группировкой. :)

Мускулем, вот тут взял пример (2 способ), и напильничком прошёлся, чтобы под мои нужды подошло.
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212114
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

пока не могу... через полгода не раньше. :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212118
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

да, и не знаю насчет "в соответствии"... у нас была транслитерация на клиенте... а мне понадобилось доливать данные запросом в табличку... ну вот и "воспроизвел" ту, которая была... за полчасика. :)

Похоливарить:
Решения на циклах в SQL - мне вообще не нравятся... это как костыль в Реляционной Алгебре для "хромоногих" (спецов от ЯП). Причем, в ЯП - это нормально и приветсвуется, как ни странно. :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212144
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Решения на циклах в SQL - мне вообще не нравятсяТак и задача не скл-ная, в общем-то.
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212154
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Ну не совсем скульная, конечно... да, в общем-то извращение это всё. Такие задачи надо решать на клиенте. Проще, дещевле и быстрее.
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212187
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в рамках мускуля можно и UDF нарисовать. Задача-то - почти чистый XLAT...
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212288
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Akina,

Похоливарить:
Решения на циклах в SQL - мне вообще не нравятся... это как костыль в Реляционной Алгебре для "хромоногих" (спецов от ЯП). Причем, в ЯП - это нормально и приветсвуется, как ни странно. :)

:) Оно и понятно, что почти все варианты только костылями и получится воспроизвести, и цикл - один из таких костылей, который по быстродействию да по накладным расходам, я так думаю, будет всё-таки быстрее, чем по каждому чиху по таблицам лазить - тут на входе строка, внутри эта строка гоняется в цикле (больше нигде не нашёл варианта, чтобы без цикла можно было обойтись), на выходе строка, "при съёмках фильма ни одна таблица не пострадала"
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212562
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20, а похоливарим (три дня убил на пустую задачу, блин). :)

дело в том, что tanglir - прав. Эта задача не совсем для Скуля и РА.
По-хорошему, она должна решаться на клиенте силами ЯП... но иногда надо, да и лепить разовую обработку на ЯП для уже имеющейся БД иногда просто "лениво"... :)

В РА - любые решения на явных циклах - свисток в сторону "косяк". По одной простой причине: РА - это набор операций над множеством данных. То есть "по определению" - циклическая обработка, которая прошита непосредственно в базовых операциях. В частности, при реализациях на каких-нибудь не Фон Неймановских архитектурах, понятие "цикл" может совсем отсутствовать. И это - нормально для реляционной алгебры в целом. Все решения циклами (и ХП в т.ч.) в этом случае - отдыхают.

Как пример, давайте пофантазируем на предмет "голографической" памяти, где поиск по ассоциативному ключу выдает сразу "весь набор записей" без каких-либо циклов... и? "цена реализации" имитирования циклических алгоритмов будет просто фантастической. :)
... в то же самое время, скульные решения - будут работать и офигительно просто: "дай мне то, что имеет такой ключик, добавь к нему по этой части выборке как ключики и оставь только такие, где..."

как итог: ЯП и Скуль - это два совершенно разных подхода к обработке данных. "То что русскому хорошо, немцу - смерть" - как нельзя применимо. :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212574
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

по-хорошему, да. Неплохо бы иметь расширенный набор встроенных функций обработки текстовых строк, в т.ч. и XLAT(). Тут много чего не хватает... увы. :(
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212708
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109andrew_jr20, а похоливарим (три дня убил на пустую задачу, блин). :)

дело в том, что tanglir - прав. Эта задача не совсем для Скуля и РА.
По-хорошему, она должна решаться на клиенте силами ЯП... но иногда надо, да и лепить разовую обработку на ЯП для уже имеющейся БД иногда просто "лениво"... :)

В РА - любые решения на явных циклах - свисток в сторону "косяк". По одной простой причине: РА - это набор операций над множеством данных. То есть "по определению" - циклическая обработка, которая прошита непосредственно в базовых операциях. В частности, при реализациях на каких-нибудь не Фон Неймановских архитектурах, понятие "цикл" может совсем отсутствовать. И это - нормально для реляционной алгебры в целом. Все решения циклами (и ХП в т.ч.) в этом случае - отдыхают.

Как пример, давайте пофантазируем на предмет "голографической" памяти, где поиск по ассоциативному ключу выдает сразу "весь набор записей" без каких-либо циклов... и? "цена реализации" имитирования циклических алгоритмов будет просто фантастической. :)
... в то же самое время, скульные решения - будут работать и офигительно просто: "дай мне то, что имеет такой ключик, добавь к нему по этой части выборке как ключики и оставь только такие, где..."

как итог: ЯП и Скуль - это два совершенно разных подхода к обработке данных. "То что русскому хорошо, немцу - смерть" - как нельзя применимо. :)

Ну про смерть-то уж загнули! :) Не настолько же там всё "плохо". Тем более всегда всё зависит от конкретной ситуации: например, в моём случае есть 2 нюанса: 1 - циклы будут в 2-4 шага (очень короткие входные строки - никогда не будет на входе 50-100-символьных параметров, которые заставят по каждому запросу колотить эту цикличность), 2 - клиент, который будет это всё запрашивать, мне неизвестен - может там php, может perl,а может что-то настолько низкоуровневое, что может только отсылать запросы, получать набор данных и пересылать их дальше - я без понятия, но перекладывать то, о чём меня попросил заказчик, на него обратно, я просто не могу - поэтому пришлось взвалить всё именно на сервер, и уже на нём выбирать - какой способ предпочтительнее :)
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38212864
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20,

1. выбирать "как есть" и отдавать на клиента. Там сами разберутся.
2. вот и меня "Заказчик попросил"... :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
транскрипция в SELECT
    #38619485
aMacedonian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
DELIMITER $$

DROP FUNCTION IF EXISTS `_fs_transliterate_ru` $$
CREATE DEFINER=`root`@`localhost`
  FUNCTION `_fs_transliterate_ru`(str TEXT)
  RETURNS text CHARSET utf8
DETERMINISTIC SQL SECURITY INVOKER
BEGIN
  DECLARE strlow TEXT;
  DECLARE sub VARCHAR(3);
  DECLARE res TEXT;
  DECLARE len INT(11);
  DECLARE i INT(11);
  DECLARE pos INT(11);
  DECLARE alphabeth CHAR(34);

  SET i = 0;
  SET res = '';
  SET strlow = LOWER(str);
  SET len = LENGTH(str); 
  SET alphabeth = ' абвгдеёжзийклмнопрстуфхцчшщъыьэюя';

  /* идем циклом по символам строки */

  WHILE i <= len DO

  SET i = i + 1;
  SET pos = INSTR(alphabeth, SUBSTR(strlow,i,1));

  /*выполняем преобразование припомощи ф-ии ELT */

  SET sub = elt(pos, '-',
  'a','b','v','g', 'd', 'e', 'e','zh', 'z',
  'i','j','k','l', 'm', 'n', 'o', 'p', 'r',
  's','t','u','f', 'h', 'c','ch','sh','sch',
  '', 'y', '','e','ju','ja');

  IF sub IS NULL THEN
  SET sub = '';
  END IF;

  SET res = CONCAT(res, sub);
  END WHILE;

  RETURN res;
END $$

DELIMITER ;
...
Рейтинг: 0 / 0
транскрипция в SELECT
    #38619489
aMacedonian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потом вызов:
Код: plsql
1.
SELECT _fs_transliterate_ru(`caption`) FROM ... LIMIT 1
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / транскрипция в SELECT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]