Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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\'ом можно это сделать?
-
ну например
update tbl1 set i_sticker=id
правда монотонного возрастания не гарантирую =)
-
нее.. так не пойдет.
дело в том, что 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;
идея понятна ?
-
[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]
-
Не тестировал, но помойму все норм.
$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\' ");
}
-
Что это за бред?