Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удалить строку, а заполнить нулями, Вместо удаления заполнить ее нулями 
:(
    Опции темы
KonstRuctor
Дата 15.6.2010, 15:00 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Привет всем!
Задача: вместо удаления строки
Код

mysql_query("DELETE FROM table WHERE id=$id")

Необходимо оставить строку с данным id, но все данные заполнить нулями:
Код

mysql_query("UPDATE table SET value1 = '0', value2 = '0', ..... , value999 = '0' WHERE id=$id")

Вопрос: есть ли готовая функция для данного действия, или для каждой таблицы надо прописывать все пары поле-ноль?
Спасибо!
PM MAIL WWW ICQ   Вверх
skyboy
Дата 15.6.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(KonstRuctor @  15.6.2010,  14:00 Найти цитируемый пост)
есть ли готовая функция для данного действия

нет.
Цитата(KonstRuctor @  15.6.2010,  14:00 Найти цитируемый пост)
или для каждой таблицы надо прописывать все пары поле-ноль?

да.
а почему в таком случае не удалить запись? если так хочется "оставить в базе" - добавь поле-флаг "запись удалена" и все запросы пиши на основании условия "в поле "запись удалена" стоит false"

Добавлено через 29 секунд
Цитата(KonstRuctor @  15.6.2010,  14:00 Найти цитируемый пост)
value999

надеюсь, индекс в имени поля - гипербола.
PM MAIL   Вверх
azesmcar
Дата 15.6.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



нету, согласен со skyboy, это строка не имеет никакого смысла, она не хранит историю (поскольку все значения удалены), она удалена фактически, но не физически, в чем смысл? Лучше либо удалить, либо сделать так

Цитата(skyboy @  15.6.2010,  15:09 Найти цитируемый пост)
а почему в таком случае не удалить запись? если так хочется "оставить в базе" - добавь поле-флаг "запись удалена" и все запросы пиши на основании условия "в поле "запись удалена" стоит false"

тогда и история будет сохраняться, но если все таки приспичило - можно сгенерировать динамический UPDATE в Stored Procedure пробежавшись по всем полям конкретной таблицы (я лично очень не советую так извращаться).
PM   Вверх
KonstRuctor
Дата 15.6.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Спасибо! 
Буду заполнять поля руками. 
Вероятность ошибки возрастает... 
Буду внимательнее.

* * *
Не знаю, как в phpmyadmin получить текстовой файл с именами полей данной таблицы (в столбик)... Есть ли такая функция?
Чтобы не набирать руками?
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 15.6.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Код

select column_name from information_schema.columns where table_name='table1';

PM   Вверх
KonstRuctor
Дата 15.6.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Вау! Спасибо! Буду знать smile 
PM MAIL WWW ICQ   Вверх
Akina
Дата 15.6.2010, 16:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

SET valueX = '0'

меняем на 
Код

SET valueX = REPEAT('0', CHAR_LENGTH(valueX))

затем делаем ещё логический шаг и превращаем такую замену в пользовательскую функцию, после чего получаем
Код

SET valueX = FillWithZeroes(valueX)

Вероятность ошибки при таком подходе весьма невелика.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.