Обновление поля данными той же строки

Aqvatarius

Новичок
Доброго времени суток.
Есть таблица mysql, 5 500 000 строк.

приблезительно такая структура

id, name, name2, marge

поле айди индекс,
name, name2 - varchar
marge - пустое поле

Задача: обьединить значения name, name2 через пробел(например), в поле marge.
Как с такими обьемами данных это сделать?

Можно ли написать sql запрос? или нужно использовать скрипт?
Пока знаний хватило на то что бы использовать скрипт. Как ускорить процесс?
 
Ну, что конкат это и так понятно...
Я видимо не верно описал задачу...

id | name | name2 | marge
1 | aaaa | bbbbb | NULL
2 | aaaa | bbbbb | NULL
3 | aaaa | bbbbb | NULL
... и записей таких 5,5 миллиона.
Нужно пройтись по каждому полю, и обьединив данные ячеек name+name2 записать их в marge
Результат:
id | name | name2 | marge
1 | aaaa | bbbbb | aaaa bbbbb
2 | aaaa | bbbbb | aaaa bbbbb
3 | aaaa | bbbbb | aaaa bbbbb
 
Спасибо...

Пы.Сы.: вот как оно бывает... среди ночи начнешь что то делать, в голову лезет все, кроме простого...
 
Еще один вопрос...
Часть данных уже обьеденена. Правильно ли будет написать запрос так?

UPDATE table SET marge = CONCAT_WS(' ', name, name2) where marge='NULL';

Повлияет ли это на скорость обработки? или лучше что бы оно еще раз по всем полям пробежалось?

Ну и 5.5кк полей это не мало, как лучше всего в такой ситуации облегчить нагрузку?
 
Не правильно ты написал запрос, как мне кажется. NULL - не строковый тип.
 
UPDATE table SET marge = CONCAT_WS(' ', name, name2) where marge='';
UPDATE table SET marge = CONCAT_WS(' ', name, name2) where marge IS NULL;
 
Что б не создавать новую тему, задам вопрос сдесь.

Соответсвенно есть таблица 5.5кк строк - `dbb`
В ней есть поле `marge` (tinytext) - в данном поле текст, в коем встречаются название стран.
В данной таблице (dbb) существует поле `country`((int)NULL)
Есть еще одна таблица с странами (countries),
`id`,`name_en`,`name_ru`,`name_ua`
240 записей...
Нужно пробежатся по полях `marge` найти значения '%`name_ua`%' ну и в случае находки записать `countries`.`id` в `bdd`.`country`:
Возможно ли это реализовать SQL запросом без вмешательства скрипта?
Сейчас есть так

UPDATE `bdd`
SET `bdd`.`country` = (SELECT `countries`.`id` FROM `countries` WHERE `bdd`.`marge` LIKE CONCAT('%',`countries`.`name_ua`,'%') AND `countries`.`id`='1')

Дайте совет пожалуйста.
 
Но данный запрос работает очень медленно, даже с условием `countries`.`id`='1'...
Выходит мне нужно писать скрипт что будет пробегать по всем странам, брать id и будет по очереди выполнять этот запрос...
Но, по времени выполнения, он загнется на первом же запросе... как быть?
 
Ну где же эти светлые головы(!!!) что обсирают в других темах программистов, и показывают свое превосходство?!
 
Aqvatarius
Не самая лучшая стратегия привлечения внимания.

WHERE `bdd`.`marge` LIKE CONCAT('%',`countries`.`name_ua`,'%') === фуллскан. улучшить - через фуллтекстовый поиск.

следующий.
 
улучшить - через фуллтекстовый поиск.

Подробнее, будьте добры.

Не самая лучшая стратегия привлечения внимания.
Как видите работает. И печально что Ваше внимание я привлек именно таким методом.

Спасибо.
 
Aqvatarius
Лично мне просто эта тема неинтересна. Задача судя по всему разовая. В чём смысл оптимизировать тут - я не вижу. Сделал один раз, подождал 20 минут, всё. Забыл.
 
Проблема в том что не 20 минутная работа... а один запрос вида
PHP:
UPDATE `bdd`
SET `bdd`.`country` = (SELECT `countries`.`id` FROM `countries` WHERE `bdd`.`marge` LIKE CONCAT('%',`countries`.`name_ua`,'%') AND `countries`.`id`='1')

занимает 10-15 минут...
 
Тогда можно в отдельную таблицу сначала собрать все `bdd`.`marge` LIKE CONCAT('%',`countries`.`name_ua`,'%'), без дополнительных условий, а потом уже обновлять, имея уже подготовленные данные, по которым индекс быстро сработает
 
Сверху