Общие > Базы данных

Инкремент по полю UNIQUE (MySQL)

(1/2) > >>

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]

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии