Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Как вставить в таблицу значение Id из справочников ?   Найти похожие ветки 

 
integery   (2005-07-19 14:18) [0]

Как вставлять в основную таблицу значениє id справочников , я так понимаю сначала нужно произвести поиск в вспровочнике вводимого значениє єсли ево там нет добавить і вернуть id а если есть то вернуть значение id и вставить в основную таблицу , подскажите как ето организовать через запрос.


 
Val ©   (2005-07-19 14:21) [1]

давайте-ка на пальцах, что имеем, что хотим. со структурами таблиц и примером.


 
integery   (2005-07-19 14:51) [2]

таблица books имеет id,id_autor,id_polka
справочники autors имеет id,autor и polks имеет id,pos
нужно запросом заполнять books


 
Val ©   (2005-07-19 14:58) [3]

Запросом books должен заполняться только тогда, когда есть соотв. записи в справочники autors и polks. Для этого необходимо выяснить, как у вас происходит ввод этих самых books в интерфейсе. То ли у вас есть при вводе книг возможность добавлять новых авторов и полки, то ли только возможность выбора из справочников.


 
integery   (2005-07-19 15:13) [4]

вот именно добавляются они не через интервес пользователя а от програми она посилает даниє напимер "Джон Савилл",5,"Windows" и нужно заганять в базу , если записи нет в справочниках добавить а єсли есть то получить id и вставить.


 
Val ©   (2005-07-19 15:22) [5]

Оборачивайте вставку в books в виде хранимой процедуры, где до вставки собственно, в books, будете анализировать справочники и вставлять новые данные, по надобности. Если ваш SQL-сервер не поддерживает ХП, то выполните эти действия на клиенте, в одной транзакции.


 
integery   (2005-07-19 15:33) [6]

я использую MySql 4.1 но там нет хранимих процедур


 
integery   (2005-07-19 15:44) [7]

я вот що навалял
INSERT INTO books (id_avtor) SELECT autors.id FROM autors WHERE autors.name = "test";


 
stone ©   (2005-07-19 15:57) [8]


> integery   (19.07.05 15:44) [7]

а оставшиеся два поля кто заполнять будет? или они допускают NULL?


 
integery   (2005-07-19 16:20) [9]

а оставшиеся можжет через update , через last_inser_id()


 
evvcom ©   (2005-07-19 16:36) [10]


> а оставшиеся можжет через update

зачем, если можно сразу в insert?


 
Lexer ©   (2005-07-19 16:58) [11]

[7] integery
А смысл вставки в таблицу книг ID автора если он уже существует в таблице авторов?
Я так думаю, пользователь в приложении выбирает автора, т.е. ID известно уже при добавлении книги. Если такого автора нет, то пользователь добавляет его сначала в базу, и выбирает его, т.е. по-любому ID автора известно.
Зачем тянуть его второй раз?


 
integery   (2005-07-19 17:23) [12]

зачем, если можно сразу в insert?  как?????????

lexer посмотри [4]


 
integery   (2005-07-19 18:37) [13]

>зачем, если можно сразу в insert?

КАК ????????

примерчик в студию плиз !!!


 
Lexer ©   (2005-07-19 19:08) [14]

integery, что тут непонятного
1. Добавляешь/обновляешь авторов
2. Добавляешь книгу:
INSERT INTO books (id_avtor, book_name, id_polka) VALUES ((SELECT autors.id FROM autors WHERE autors.name = "test"), :book_name, :id_polka);


 
integery   (2005-07-19 19:38) [15]

так для id_polka нужно тоже зделать SELECT polks.id FROM polks WHERE polks.pos = 5


 
Lexer ©   (2005-07-19 19:52) [16]

>так для id_polka нужно тоже зделать SELECT polks.id FROM polks WHERE polks.pos = 5

)))
ага, а что есть другие варианты?


 
integery   (2005-07-19 19:55) [17]

ура !!
INSERT INTO books (id_avtor, book_name, id_polka) VALUES ((SELECT autors.id FROM autors WHERE autors.name = "test"), :book_name, SELECT polks.id FROM polks WHERE polks.pos = 5);
работаєт!!

ИЩО маленькая проблемка как зделать проверку если нет записи например в polks то вставить ??????


 
Lexer ©   (2005-07-19 20:00) [18]

так же, как и для авторов
EXISTS(SELECT....)
Если нет записи, то INSERT.
Или, если уник. значения, то
try INSERT "полки и авторы" finally INSERT "КНИГИ" end


 
integery   (2005-07-19 20:08) [19]

я так поняв на чистом sql ето уже не удастца зделать


 
evvcom ©   (2005-07-20 08:27) [20]

Ты где собрался брать autors.name = "test" и polks.pos = 5? Ведь не константы же у тебя здесь будут. Подумай над этим, и многое прояснится. Если нет, толкнем дальше.


 
integery   (2005-07-20 12:40) [21]

"test" 5 yt не проблема !!!

маленькая проблемка как зделать проверку если нет записи например в polks то вставить і делать ето без try .... finally ??????


 
Lexer ©   (2005-07-20 13:13) [22]

> [21] integery
достаёшь данные из БД, если не достается - то добавь


 
evvcom ©   (2005-07-20 13:17) [23]


> integery   (20.07.05 12:40) [21]

Ты не ответил на наводящий вопрос и хочешь получить вразумительный ответ?


 
integery   (2005-07-20 13:23) [24]

дание берутса див. [4]


 
Lexer ©   (2005-07-20 13:24) [25]

evvcom, ответ на твой вопрос [20] в [4]


 
evvcom ©   (2005-07-20 13:29) [26]

Да, не заметил... Хранимки-то на MySQL есть? Только сейчас обратил внимание, что MySQL используется.


 
integery   (2005-07-20 14:16) [27]

я читал що "Хранимки-то на MySQL " тока в 5 будут


 
evvcom ©   (2005-07-20 14:30) [28]

тогда select из справочника, если вернулся пустой набор, то insert, если получения автоматически сгенеренного id (если такое вообще есть) нельзя, значит опять select из справочника, потом insert уже в целевую таблицу с известным id.


 
integery   (2005-07-20 15:21) [29]

Ок всем оргомное СПАСИБО !!!



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.067 c
6-1116131265
A№t0№
2005-05-15 08:27
2005.08.28
Определение подключения к интернету


4-1121073249
Вт
2005-07-11 13:14
2005.08.28
Настройка экрана


14-1123066229
вразлет*
2005-08-03 14:50
2005.08.28
Славянский эсперанто


4-1121083542
SpyBoy
2005-07-11 16:05
2005.08.28
combobox


8-1113997439
Comrade
2005-04-20 15:43
2005.08.28
Просмотр Видио файла