Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужен совет по обработке 1ккк записей в базе
 
 автор: da_potap   (29.06.2009 в 23:51)   письмо автору
 
 

Постановка задачи:
Есть таблица условно состоящая из двух полей id, data. Поле data типа лонгтекст и содержит масив значений разделенных пробелом. Необходимо изменить 1 значение в масиве.
Я могу это сделать пхп+мускул прямим способом: поочереди брать ячейку, доставать значение, разбивать его на массив, менять значение, преобразовывать в строку и вставлять обратно.
Но 1 милион записей зарождает сомнение...сколько займет обработка такого скрипта и исполнится ли он корректно.
Прошу наставить на путь истинный и подсказать решение.
SUBSTRING_INDEX(data,' ',35) - есть такая функция для получения значения после 35пробела. Возможно есть обратная, которой можна вставить значение в 25 после пробела. В общем нужен совет.

  Ответить  
 
 автор: Trianon   (30.06.2009 в 00:06)   письмо автору
 
   для: da_potap   (29.06.2009 в 23:51)
 

совет - тредиционный. Не хранить массивы элементов данных, вытягивая их в горизонталь, если к этим элементам требуется прямой доступ.
Не делают так в БД.
Хранить эти элементы в разных строках другой (связанной) таблицы.

  Ответить  
 
 автор: da_potap   (30.06.2009 в 00:26)   письмо автору
 
   для: Trianon   (30.06.2009 в 00:06)
 

Совет не подходит по 2м причинам.
Во превых эта база есть и ничего уже не изменить.
Во вторых это экстренная ситуация, необходимо внести оччень большой фикс.
Мне нужно найти решение, это не теоретическая задача.

  Ответить  
 
 автор: Trianon   (30.06.2009 в 00:37)   письмо автору
 
   для: da_potap   (30.06.2009 в 00:26)
 

Вы не написали ни как происходит выбор номера фрагмента, ни как нужно менять сам фрагмент.
В такой ситуации, само собой
а) предложенное Вами решение - единственно возможное
б) скрипт естественно исполнится вполне корректно, особенно если его корректно написать ,
вчастности предусмотреть поэтапную обработку, т.е. помечать уже исправленные записи.
в) скорость исполнения Вас волновать не должна. Уж коль скоро Вы (или владелец - не важно) выбрали такую ужасную схему БД , ценой за этот выбор встанет время обработки. И цену эту Вы/он заплатите.

А изменить можно всегда.

  Ответить  
 
 автор: da_potap   (30.06.2009 в 00:48)   письмо автору
 
   для: Trianon   (30.06.2009 в 00:37)
 

Накину немного детальнее.
В моей таблице в поле data есть значение вида (1 2 3 4 5). Мне необходимо во всех записях таблицы в поле дата поменять пятый елемент с 5 скажем на 10.
Если эти уточнения на предидущий ответ как то влияют, то внесите уточнение если же нет, тогда спс за помощь.

  Ответить  
 
 автор: Trianon   (30.06.2009 в 01:35)   письмо автору
 
   для: 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
Разрушить таблицу весьма легко.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования