Автор Тема: Инкремент по полю UNIQUE (MySQL)  (Прочитано 3968 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vespen1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Инкремент по полю UNIQUE (MySQL)
« : 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\'ом можно это сделать?

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Инкремент по полю UNIQUE (MySQL)
« Ответ #1 : 31 Марта 2004, 13:47:22 »
ну например
update tbl1 set i_sticker=id
правда монотонного возрастания не гарантирую =)
AS IS...

Оффлайн vespen1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Инкремент по полю UNIQUE (MySQL)
« Ответ #2 : 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
« Последнее редактирование: 31 Марта 2004, 14:37:05 от vespen1 »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Инкремент по полю UNIQUE (MySQL)
« Ответ #3 : 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;

идея понятна ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
Инкремент по полю UNIQUE (MySQL)
« Ответ #4 : 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]

Оффлайн PyJIeT

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://myscript.h12.ru
Инкремент по полю UNIQUE (MySQL)
« Ответ #5 : 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\' ");
}
There no unblockable doors, there no unwinnered wars

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Инкремент по полю UNIQUE (MySQL)
« Ответ #6 : 01 Апреля 2004, 07:09:32 »
Что это за бред?

 

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