Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

Как вставить в таблицу значение 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1123137542
Alex*
2005-08-04 10:39
2005.08.28
Тактико-экономическая оценка (ТЭО) программнного средства


1-1123429873
BackGround
2005-08-07 19:51
2005.08.28
Socket.Data


5-1095141902
Lera
2004-09-14 10:05
2005.08.28
Инсталяция компоненты.


6-1116066766
DeadEliZe
2005-05-14 14:32
2005.08.28
Indy 10: idIRC - баги, исправления, вопросы


1-1123612655
Aleksandrrr
2005-08-09 22:37
2005.08.28
Блокировка выделенных клавиш !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский