Я получаю немного рассола с MySQL Perl DBI. Я искал и могу найти только половину ответа за раз, и я не знаю, как совместить то, что я знаю, чтобы получить правильный ответ.Perl DBI MySQL Вставка с использованием как заполнителей, так и внешнего ключа
У меня есть несколько баз данных, один является родителем:
mysql> desc records;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| File_Id | int(11) | NO | PRI | NULL | auto_increment |
| fname | varchar(59) | YES | | NULL | |
| type | varchar(3) | YES | | NULL | |
| n1size | int(11) | YES | | NULL | |
| downdate | date | YES | | NULL |
mysql> desc mhqc;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| MQ_Id | int(11) | NO | PRI | NULL | auto_increment |
| fieldnum | tinyint(4) | YES | | NULL | |
| result | varchar(10) | YES | | NULL | |
| File_Id | int(11) | YES | MUL | NULL | |
+----------+-------------+------+-----+---------+----------------+
записи заполняются уже и я хочу, чтобы добавить записи в mhqc. Я делаю полный беспорядок моей инструкции SQL!
Переменные мне нужно вставить (определяется просто для простоты), являются:
my @fields = (1..41); # this is for the fieldname column
my @results # 41 elements, contains results of checks performed on the fields 1-41
Итак, я хочу, чтобы перебрать числа результатов/полей:
INSERT INTO mphqc (MQ_Id, fieldname, result, File_Id) values (NULL, ?, ? ...
... и здесь я застреваю. Я, очевидно, необходимо включить какой-то оператора выбора, как показано ниже, чтобы связать все вместе
SELECT File_Id from records where fname = \'$in_file';
Я просто не могу найти, как это сделать и когда file_id должен быть записан в дочерней таблице. Ваша помощь приветствуется! :)
Спасибо, Бородин. Я начал пробовать все виды случайных вложенных утверждений и придумал что-то очень похожее. – emmalg
Я только что понял, что моя работа еще не работает, я получаю NULL в столбце File_Id my $ sql = 'INSERT INTO mhqc (fieldnum, result, File_Id) значения (?,?, (SELECT records.File_ID FROM records WHERE fname =?)) '; Фактически я отредактировал заявление в соответствии с вашим, и у меня такая же проблема. – emmalg
@emmalg: Тогда в 'records' нет элемента, соответствующего вашему имени файла. Вы можете запустить это, чтобы проверить 'print 'File_Id =', $ dbh-> selectrow_array ('SELECT File_Id FROM records WHERE fname =?', Undef, $ in_file)," \ n ";' – Borodin