|
|
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
День добрый, прошу помощи. В mysql не особо спец, возник вопрос. Есть хранимая процедура, в процедуру необходимо передать строку как текст к примеру: call procedure("Какой-то текст $field1 $field2 $ field3") или call procedure("Какой-то текст $field3 еще какой-то текст $field3 еще текст") Значения $field# в тексте заменить на значения заранее известных полей т.е. к примеру $field1 = mytable.field1, $field2 = mytable.field2 и т.д. И записать полученную строку в какое то поле таблицы. В передаваемой строке поля $field# могут находится в произвольном порядке и повторяться, текст аналогично. Заранее спасибо ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 14:48:52 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Ну так и заменяй перед вызовом. MySQL-то тут каким боком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 15:46:43 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Вы наверное меня не поняли Мне необходимо передать в процедуру текст, заменить в нем определенные "слова/переменные" на значения полей таблицы, и полученный текст вставить в опредленное поле таблицы и так пройтись и обновить это поле по всей таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 17:24:39 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Можно тупо функцией REPLACE(), но там всплывает куча тонкостей. Например, что будет (и что должно быть), если в каком-то из полей встретится $field# ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 17:36:21 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Вот сейчас кручу Raplace. Получилось нечто Update .... set l.md = replace(m_d,'$name',l.n) where .... Вызываю call procedure("Пользователь $name"), все отрабатывает как нужно. Вот теперь не понятно как несколько raplace сделать, для вот такого вызова call procedure("Пользователь $name $first_name какой то текст") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 17:44:49 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
kharkov_maxВот теперь не понятно как несколько raplace сделатьВложить один в другой, очевидно. Это же простая функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 18:22:45 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Да в том то и дело что так set l.md = replace(replace(m_d,'$first_name',l.nnnn),'$name',l.n) не работает, ошибку выдает ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 18:34:18 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
kharkov_maxошибку выдает ...показывайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 18:38:14 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Странно... заменил $first_name на $first_n и все заработало ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 18:43:24 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Разобрался ))) Входящий параметр ограничивал Create procedure .... ( ... , in m_d varcha(20)) Переменная больше получалась в результате, увеличил кол-во символов и все заработало. Всем спасибо, результат достигнут ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 18:55:05 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Вот задумался на счет оптимизации запроса ... Ведь если мне придется передавать к примеру максимум 30 параметров, а реально я буду передавать только 2 или 3 , то выше описанный механизм выполнится 30 раз, т.е. replace отработает 30 раз. Можно как то это разложить на цикл и case ... Что бы отрабатывать только те переменные что указаны в параметре ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 08:48:52 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Replace всегда начинает с поиска Instr (а как иначе?) - а коли так, то и нет особого смысла. Думать нужно об оптимизации не запроса, а процесса. Ибо всё действо целиком смотрится черезпопно... посему скорее всего где-то косяк в выборе пути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 10:20:33 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
kharkov_maxВот задумался на счет оптимизации запроса ... Ведь если мне придется передавать к примеру максимум 30 параметров, а реально я буду передавать только 2 или 3 , то выше описанный механизм выполнится 30 раз, т.е. replace отработает 30 раз. Можно как то это разложить на цикл и case ... Что бы отрабатывать только те переменные что указаны в параметре ?30 replace выполняются практически столько же времени, сколько и 2-3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 10:38:58 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Akina, Ну как бы другого метода (простого и тупого) я не нашел. Можно конечно цикл развернуть, но боюсь что он только усложнит запрос и запрос будет работать дольше. Cygapb-007, Спасибо попробую, возможно Вы правы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 11:18:40 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
kharkov_maxНу как бы другого метода (простого и тупого) я не нашел. И решил, что его не существует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 12:03:14 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Akina, Нет, если у вас есть другие идеи подскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 14:11:59 |
|
||
|
Разобрать строку и заменить переменные на значения.
|
|||
|---|---|---|---|
|
#18+
Я же сказал - оптимизировать надо процесс. Пока же о том, что есть процесс, знаешь только ты. А нам известны лишь твои попытки выполнить один из его этапов, причём выбранным тобой способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2013, 14:20:14 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38483411&tid=1835618]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 299ms |

| 0 / 0 |
