[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL запрос заполняющий поле значениями
Makhrov
всем привет.
Есть БД
необходимо сделать такой запрос ,что бы он заполнил определенное поле в таблице.

Например: есть таблица с данными, всего 1200 строк. есть поля name number user
во всех строках поле number пустое. задача заполнить это поле порядковыми номерами.





Спустя 3 минуты, 17 секунд (27.01.2011 - 15:03) linker написал(а):
Раньше надо было ставить на NUMBER автоинкремент.

Спустя 1 минута, 37 секунд (27.01.2011 - 15:05) Makhrov написал(а):
Цитата (linker @ 27.01.2011 - 12:03)
Раньше надо было ставить на NUMBER автоинкремент.

это уже известно.
вопрос что делать сейчас?
может знает кто ?


Спустя 8 минут, 46 секунд (27.01.2011 - 15:14) linker написал(а):
Просто поставь на поле autoincrement и ключ уникальности тоже прежде не плохо было бы поставить.

Спустя 7 минут, 43 секунды (27.01.2011 - 15:22) Makhrov написал(а):
да я поставил.
но те поля которые не заполнены изначально (NULL) как же теперь их заполнить?

Спустя 2 минуты, 34 секунды (27.01.2011 - 15:24) Makhrov написал(а):
предполагаю что то вроде -

UPDATE таблицу
SET number= может счетчик?
WHERE number is NULL

сильно не пинать я новичок :rolleyes:

Спустя 30 минут, 47 секунд (27.01.2011 - 15:55) linker написал(а):
Ну надо было всем записям в number сначала поставить NULL, а потом уже автоинкремент ставить, мускул сам расставит значения.

Спустя 1 час, 11 минут, 52 секунды (27.01.2011 - 17:07) Dron19 написал(а):
а если тебе чисто заполнить бд надо, то можно в цикле, раз ты реально планируешь только заполнить ее

Спустя 1 час, 30 минут, 51 секунда (27.01.2011 - 18:38) ihatemac написал(а):
1. Создай new_ТАБЛИЦА с autoincrement
2. С помощью цикла пробегись по свой таблице и сделай записи в новую
3. Удали старую таблицу
4. Новую таблицу переименую в старую

Результат: новая таблица с autoincrement и старыми данными.

Спустя 1 час, 33 минуты, 49 секунд (27.01.2011 - 20:11) sergeiss написал(а):
ihatemac - идея совершенно верная, только цикл в п.2 не нужен smile.gif Можно сделать всё одним запросом. А остальные пункты надо сделать, как ты описал.

Спустя 3 часа, 9 минут, 47 секунд (27.01.2011 - 23:21) ihatemac написал(а):
sergeiss
Забыл про концепцию INSERT ... SELECT laugh.gif

Спустя 6 часов, 44 минуты, 22 секунды (28.01.2011 - 06:06) Makhrov написал(а):
Цитата (sergeiss @ 27.01.2011 - 17:11)
ihatemac - идея совершенно верная, только цикл в п.2 не нужен :) Можно сделать всё одним запросом. А остальные пункты надо сделать, как ты описал.

каким запросом это сделать?
поля с самого начал были NULL

создал триггер для поля -
CREATE OR ALTER TRIGGER TR_GEN_TABLE_ID FOR TABLE
ACTIVE BEFORE INSERT POSITION 0
AS

begin
IF (NEW.NUMBER IS NULL) THEN
NEW.NUMBER=GEN_ID(GEN_TABLE_ID,1);

end


поля со значением нулл не заполнились :(
но автозаполнение работает для новых записей!

Спустя 1 минута, 40 секунд (28.01.2011 - 06:07) Makhrov написал(а):
Цитата (Dron19 @ 27.01.2011 - 14:07)
а если тебе чисто заполнить бд надо, то можно в цикле, раз ты реально планируешь только заполнить ее

заполнить надо только одно поле.
в том то и дело, что не знаю как циклом заполнять

Спустя 2 часа, 58 минут, 47 секунд (28.01.2011 - 09:06) sergeiss написал(а):
Цитата (Makhrov @ 28.01.2011 - 07:07)
в том то и дело, что не знаю как циклом заполнять

Тебе же уже написали ПОЛНЫЙ АЛГОРИТМ действий!!! Не надо никаких циклов!!!

(немного изменю одну цитату из темы, мои изменения выделены синим)
Цитата (ihatemac @ 27.01.2011 - 19:38)

1. Создай new_ТАБЛИЦА с новым полем типа autoincrement
2. С помощью запроса типа INSERT .... SELECT перепиши все данные в новую таблицу. При этом новое поле автоматически получит новые, уникальные величины
3. Удали старую таблицу
4. Новую таблицу переименую в старую


Спустя 15 минут, 43 секунды (28.01.2011 - 09:22) linker написал(а):
UPDATE `table` SET `number` = NULL
ALTER TABLE
`table` ADD UNIQUE (`number`)
ALTER TABLE `table` CHANGE `number` `number` INT(4) NOT NULL AUTO_INCREMENT
Все это делается кликая мышкой в phpMyAdmin'е. Нафика мутить какие-то запросы, триггеры, процедуры, когда Мускул сам может все расставить как надо.

Спустя 7 минут, 35 секунд (28.01.2011 - 09:29) Makhrov написал(а):
забыл сказать что работаю с базой Interbase smile.gif

Спустя 59 минут, 23 секунды (28.01.2011 - 10:29) sergeiss написал(а):
Makhrov - дык... Какая разница, какая БД??? Тот алгоритм, что я написал недавно, годится для любого типа БД: MySQL, PostgreSQL, Interbase... Эти 4 действия выполнить недолго. Надо просто сесть и сделать!!!

Спустя 1 час, 11 минут, 38 секунд (28.01.2011 - 11:40) Makhrov написал(а):
Цитата (sergeiss @ 28.01.2011 - 07:29)
Makhrov - дык... Какая разница, какая БД??? Тот алгоритм, что я написал недавно, годится для любого типа БД: MySQL, PostgreSQL, Interbase... Эти 4 действия выполнить недолго. Надо просто сесть и сделать!!!

спасибо. алгоритм я конечно понял smile.gif
именно так сейчас и буду делать.

но хотел узнать - а разве нет просто запроса SQL который бы заполнил всё поле автоматом?
Или может цикл в РНР можно написать?

Спустя 23 минуты, 4 секунды (28.01.2011 - 12:03) ihatemac написал(а):
Makhrov
Ты прикалываешься? smile.gif

Спустя 4 минуты, 8 секунд (28.01.2011 - 12:08) sergeiss написал(а):
Цитата (ihatemac @ 28.01.2011 - 13:03)
Ты прикалываешься?

Нет, ему просто пообщаться хочется smile.gif Вот и общается. Или развлекается. Вместо того, чтобы сделать дело.

Спустя 32 минуты, 48 секунд (28.01.2011 - 12:40) Makhrov написал(а):
Цитата (sergeiss @ 28.01.2011 - 09:08)
Цитата (ihatemac @ 28.01.2011 - 13:03)
Ты прикалываешься?

Нет, ему просто пообщаться хочется smile.gif Вот и общается. Или развлекается. Вместо того, чтобы сделать дело.

дело сделал ))
спасибо, все получилось.

а вопросы выше были только для самообученя, так сказать.... rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.