![]() |
|
Модераторы: skyboy |
![]()
|
|
| Cetus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 18.4.2004 Репутация: 1 Всего: 1 |
Как описать создание следующей таблицы?
(id, Code, stringname) id - auto_increment; stringname - строка; Code состоит из XX.YY.ZZ, где XX - числовое значение, при добавлении: либо указывается в запросе либо равно id. при редактировании значение поля Code НЕ изменяется YY - дата; ZZ - символ или число. --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Cetus, боюсь, в этом варианте невозможно. Более подробно опишите задачу - постараемся придумать.
Дело в том, что для составления поля Code требуется хранимка, а хранимок в стабильных версиях нет. -------------------- Теперь при чем :P |
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
Cetus
Для реализации твоего варианта придётся использовать дополнительный UPDATE после операции INSERT если XX=id... Если же XX!=id, то формируй поля Code сам перед вставкой записи в таблицу... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
GoodBoy, в описаном варианте не прокатит:
-------------------- Теперь при чем :P |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Cetus А может лучше разбить поле Code на три?
|
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Имхо, лучше вычислять на выборке, а результат представлять как столбец.
-------------------- Теперь при чем :P |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
А смысл этого поля, зачем оно?
|
|||
|
||||
| Cetus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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
дело в том, что между Insert Update может вклиниться другой клиент. Чтобы избежать этого надо блокировать таблицу. код будет вида lock table asd; inesrt .... update .... unlock table asd; мне такой вариант не очень нравиться, т.к. обращений к таблице достаточно много и это будет замедлять работу с сервером. --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
В этом нет ничего страшного. Создай поле sid, запиши туда какой-нибудь ид (например, MD5 хеш - имени товара ) и update делай по этому sid, в момент редактирования обнули sid, чтоб место не занимал. -------------------- Теперь при чем :P |
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
Cetus
Ну могу посоветовать тебе использовать Оракл... :-)))))))))))) |
|||
|
||||
| Cetus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 18.4.2004 Репутация: 1 Всего: 1 |
Ignat,
в том то и дело что _много_ товаров с _одинаковым имемем_, тут требуется различать между собой все товары с одинаковым именем. Заказчик - параноик --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Решение:
1. изменить структуру бд - зранить весь товар в одной таблицн 2. использовать уникальные ключи: uniqid("") генерировать их в пхп. |
|||
|
||||
| Cetus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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) --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Cetus В стабильных венрсиях вроде бы нет хранимых процедур
читай предыдущее сообщение. |
|||
|
||||
| Cetus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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: не понравилось, сказал, что слишком длинный ключ --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |