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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вычисляемое поле, хранимой процедурой или при созд таблицы 
:(
    Опции темы
Cetus
Дата 24.11.2004, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

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



Как описать создание следующей таблицы?
(id, Code, stringname)
id - auto_increment;
stringname - строка;
Code состоит из XX.YY.ZZ, где
XX - числовое значение, при добавлении:
либо указывается в запросе либо равно id.
при редактировании значение поля Code НЕ
изменяется
YY - дата;
ZZ - символ или число.
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Ignat
Дата 24.11.2004, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Cetus, боюсь, в этом варианте невозможно. Более подробно опишите задачу - постараемся придумать.

Дело в том, что для составления поля Code требуется хранимка, а хранимок в стабильных версиях нет.


--------------------
Теперь при чем :P
PM   Вверх
GoodBoy
Дата 25.11.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Cetus
Для реализации твоего варианта придётся использовать дополнительный UPDATE после операции INSERT если XX=id... Если же XX!=id, то формируй поля Code сам перед вставкой записи в таблицу...


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Ignat
Дата 25.11.2004, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



GoodBoy, в описаном варианте не прокатит:

Цитата(Cetus @ 24.11.2004, 16:13)
при редактировании значение поля Code НЕ
изменяется




--------------------
Теперь при чем :P
PM   Вверх
Secandr
Дата 25.11.2004, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Cetus А может лучше разбить поле Code на три?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Ignat
Дата 25.11.2004, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Имхо, лучше вычислять на выборке, а результат представлять как столбец.


--------------------
Теперь при чем :P
PM   Вверх
Secandr
Дата 25.11.2004, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



А смысл этого поля, зачем оно?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Cetus
Дата 25.11.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

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



Впринципе можно поле Code разбить на 3.
Мои поиски по документации привели к такому решению.
на сервере описать функцию OnInsert для данной таблицы.
полятаблицы:
Id - auto_increment,
Code - integer, }
DateIn - Date, } бывшее поле Code
IdTOV - char, }
StringName - char(255);

Смысл поля Code - уникальный код товара.
Дело в том что запись о товаре может кочевать по разным таблицам, и поле Code должно быть постоянно.
При поступлении товара на склад уникальный номер (использую Id-auto_increment) прописывается в поле Code.


Что должна выполнять функция(OnInsert):
при вставке новой записи выполняется проверка:
если Code = 0 то Code := Id
иначе ничего не менять.

!! Хотелось бы увидеть пример функции, если тип поля (!) Code - integer и (!) Code - char(255)

Как залить/описать на сервере данную функцию?
Добавлено @ 12:18
Цитата(GoodBoy @ 25.11.2004, 11:09)
Cetus
Для реализации твоего варианта придётся использовать дополнительный UPDATE после операции INSERT если XX=id... Если же XX!=id, то формируй поля Code сам перед вставкой записи в таблицу...

дело в том, что между Insert Update может вклиниться другой клиент.
Чтобы избежать этого надо блокировать таблицу.
код будет вида

lock table asd;
inesrt ....
update ....
unlock table asd;

мне такой вариант не очень нравиться, т.к. обращений к таблице достаточно много и это будет замедлять работу с сервером.
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Ignat
Дата 25.11.2004, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(Cetus @ 25.11.2004, 12:14)
дело в том, что между Insert Update может вклиниться другой клиент.

В этом нет ничего страшного. Создай поле sid, запиши туда какой-нибудь ид (например, MD5 хеш - имени товара ) и update делай по этому sid, в момент редактирования обнули sid, чтоб место не занимал.


--------------------
Теперь при чем :P
PM   Вверх
GoodBoy
Дата 25.11.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Cetus
Ну могу посоветовать тебе использовать Оракл... :-))))))))))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Cetus
Дата 25.11.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

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



Ignat,
в том то и дело что _много_ товаров с _одинаковым имемем_, тут требуется различать между собой все товары с одинаковым именем.
Заказчик - параноик smile

--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Secandr
Дата 25.11.2004, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Решение:
1. изменить структуру бд - зранить весь товар в одной таблицн
2. использовать уникальные ключи: uniqid("") генерировать их в пхп.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Cetus
Дата 25.11.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

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



Как написать серверную функцию вида:
OnInsert
[Code - integer]
Если Code = NULL or Code = 0 то Code := Id;
или
[Code - char(255)]
Если Code = NULL or Code = '' то Code := IntToStr(Id)
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Secandr
Дата 25.11.2004, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Cetus В стабильных венрсиях вроде бы нет хранимых процедур smile
читай предыдущее сообщение.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Cetus
Дата 25.11.2004, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

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



Как написать серверную функцию вида:
OnInsert
[Code - integer]
Если Code = NULL or Code = 0 то Code := Id;
или
[Code - char(255)]
Если Code = NULL or Code = '' то Code := IntToStr(Id)

у меня MySQL 4.0.2 в документации написано что можно добавлять пользовательские процедуры.

сервер MySQL, клиент на Delphi. так что PHP использовать не могу.
предлагал клиенту использовать GUID:
не понравилось, сказал, что слишком длинный ключ smile))
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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