Forum Webscript.Ru

Общие => Базы данных => Тема начата: vespen1 от 31 Марта 2004, 13:42:33

Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: vespen1 от 31 Марта 2004, 13:42:33
Есть исходная таблица:
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\'ом можно это сделать?
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: ThE0ReTiC от 31 Марта 2004, 13:47:22
ну например
update tbl1 set i_sticker=id
правда монотонного возрастания не гарантирую =)
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: vespen1 от 31 Марта 2004, 14:00:14
нее.. так не пойдет.
дело в том, что 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
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: Макс от 31 Марта 2004, 16:09:23
примерно так:

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;

идея понятна ?
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: tserbis от 31 Марта 2004, 16:28:19
[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]
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: PyJIeT от 31 Марта 2004, 20:10:54
Не тестировал, но помойму все норм.

$result_s = mysql_query("SELECT * FROM table");
$size = mysql_num_rows($result_s);
for($i = 1; $i < $size; $i++){
mysq_query("UPDATE table SET i_stiker = \'$i\' ");
}
Название: Инкремент по полю UNIQUE (MySQL)
Отправлено: hanslinger от 01 Апреля 2004, 07:09:32
Что это за бред?