|
|
|
| Постановка задачи:
Есть таблица условно состоящая из двух полей id, data. Поле data типа лонгтекст и содержит масив значений разделенных пробелом. Необходимо изменить 1 значение в масиве.
Я могу это сделать пхп+мускул прямим способом: поочереди брать ячейку, доставать значение, разбивать его на массив, менять значение, преобразовывать в строку и вставлять обратно.
Но 1 милион записей зарождает сомнение...сколько займет обработка такого скрипта и исполнится ли он корректно.
Прошу наставить на путь истинный и подсказать решение.
SUBSTRING_INDEX(data,' ',35) - есть такая функция для получения значения после 35пробела. Возможно есть обратная, которой можна вставить значение в 25 после пробела. В общем нужен совет. | |
|
|
|
|
|
|
|
для: da_potap
(29.06.2009 в 23:51)
| | совет - тредиционный. Не хранить массивы элементов данных, вытягивая их в горизонталь, если к этим элементам требуется прямой доступ.
Не делают так в БД.
Хранить эти элементы в разных строках другой (связанной) таблицы. | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2009 в 00:06)
| | Совет не подходит по 2м причинам.
Во превых эта база есть и ничего уже не изменить.
Во вторых это экстренная ситуация, необходимо внести оччень большой фикс.
Мне нужно найти решение, это не теоретическая задача. | |
|
|
|
|
|
|
|
для: da_potap
(30.06.2009 в 00:26)
| | Вы не написали ни как происходит выбор номера фрагмента, ни как нужно менять сам фрагмент.
В такой ситуации, само собой
а) предложенное Вами решение - единственно возможное
б) скрипт естественно исполнится вполне корректно, особенно если его корректно написать ,
вчастности предусмотреть поэтапную обработку, т.е. помечать уже исправленные записи.
в) скорость исполнения Вас волновать не должна. Уж коль скоро Вы (или владелец - не важно) выбрали такую ужасную схему БД , ценой за этот выбор встанет время обработки. И цену эту Вы/он заплатите.
А изменить можно всегда. | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2009 в 00:37)
| | Накину немного детальнее.
В моей таблице в поле data есть значение вида (1 2 3 4 5). Мне необходимо во всех записях таблицы в поле дата поменять пятый елемент с 5 скажем на 10.
Если эти уточнения на предидущий ответ как то влияют, то внесите уточнение если же нет, тогда спс за помощь. | |
|
|
|
|
|
|
|
для: da_potap
(30.06.2009 в 00:26)
| |
UPDATE tbl
SET
`data` = CONCAT(SUBSTRING_INDEX(`data`, ' ', 4), ' ',
'10',
SUBSTRING(`data`, 1+LENGTH(SUBSTRING_INDEX(`data`, ' ', 5))))
|
AS IS
Разрушить таблицу весьма легко. | |
|
|
|