В базе есть поле hash формируется так md5(time())
Нужно сделать его уникальным, но оно задублилось...
как обновить для всех дублей столбец hash с новым md5(time())
Yuriy: Это понятно, но хэши двух уникальных элементов могут быть одинаковыми.
Чтобы правильно найти дубли надо знать, по какому полю можно отследить первую из записей, или придётся обновлять все дубли.
UPDATE (
SELECT `hash`, MIN(`field`) AS `first`
FROM `table`
GROUP BY `hash`
HAVING COUNT(*) > 1
) AS `t1` ON `t1`.`hash` = `t`.`hash`
JOIN `table` AS `t` ON `t`.`hash` = `t1`.`hash`
AND `t`.`field` <> `t1`.`first`
SET `t`.`hash` = ...
Yuriy: Это всё равно не гарантирует отсутствия дублей. Сам принцип хэша - снижение мощности пространства значений - делает появление коллизий неизбежным, вопрос лишь в вероятности.
1) Делаете запрос из базы всех hash и их id
2) Проходитесь по этому массиву, находите дубли и заменяете их на новые генерированные, какие вам нужно.
3) в массиве у вас есть еще id. по ним находите в базе данные и их потом обновляете.