Форум: "Базы";
Текущий архив: 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.041 c