MySQL snippets

Матеріал з Wiki.Zina
Версія від 06:53, 3 вересня 2009, створена >Олександр Антонов (Новая: === Зробити значення поля унікальними === Є таблиця '''''table''''' у неї ключове поле '''''obj_id''''' і поле '''''obj_uniq_fie...)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Зробити значення поля унікальними

[ред. | ред. код]

Є таблиця table у неї ключове поле obj_id і поле obj_uniq_field, яке має бути унікальним, але не унікальне. Нижче наведено запит, який робить це поле унікальним (повторюваним значенням приписує унікальний суфікс)

SET @ind = 0;
UPDATE `table` n,
(
	SELECT buf.`id`,@ind:=@ind+1 ind, buf.url,CONCAT(buf.`url`,'-',@ind) `uurl`
	FROM
	(
		SELECT n1.`obj_id` id, min(n.`obj_id`) mn, n1.`obj_uniq_field` url
		FROM `table` n,`table` n1
		WHERE n1.`obj_uniq_field`=n.`obj_uniq_field` AND n1.`obj_uniq_field` IS NOT NULL AND n1.`obj_id` != n.`obj_id`
		GROUP BY n1.`obj_id`
		HAVING if(id<mn, id, mn) != id
	) buf
) buf
SET n.`obj_uniq_field`=buf.`uurl`
WHERE n.`obj_id`=buf.`id`;