Общие > Базы данных
Инкремент по полю UNIQUE (MySQL)
vespen1:
Есть исходная таблица:
CREATE TABLE tbl1
(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
dat_from DATE NOT NULL DEFAULT \'0000-00-00\',
i_place BLOB NOT NULL,
i_price FLOAT NOT NULL,
i_sticker INT(11) UNIQUE,
i_prim BLOB NOT NULL
);
В ней уже существует около тысячи записей.
Необходимо пронумеровать (от 1 до ...) значения поля "i_sticker".
В этом поле уже есть значения (1, 23423, NULL) не представляющие никакой ценности. Каким UPDATE\'ом можно это сделать?
ThE0ReTiC:
ну например
update tbl1 set i_sticker=id
правда монотонного возрастания не гарантирую =)
vespen1:
нее.. так не пойдет.
дело в том, что update надо делать с условием
update tbl1 set i_sticker= where i_place=\'place1\';
Нумерация должна быть такая:
I_PLACE I_STICKER
=============
place1 1
place1 2
place1 3
place1 4
place3 7
place2 5
place2 6
Макс:
примерно так:
--- Код: ---
SET @i := 0;
CREATE TEMPORARY TABLE tmp_tab SELECT .... , (@i := @i +1) as i_stiker FROM tbl1 WHERE i_place = \'place1\';
REPLACE tbl1 SELECT * FROM tmp_tab;
--- Конец кода ---
идея понятна ?
tserbis:
[off]
vespen1,
один warning про
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY :
mysql_insert_id() converts the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT, the value returned by mysql_insert_id() will be incorrect. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query.
[/off]
Навигация
Перейти к полной версии