Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Добавление двух id в связующую таблицу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Fsingle
Отправлено: 06 Мая, 2014 - 18:02:36
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2.     $sql = q("INSERT INTO book SET
  3.            id_book = '',
  4.            date_add = '".es(date('Y-m-d H:i:s'))."',      
  5.            title_book = '".es($_POST['title_book'])."',
  6.            annot_book = '".es($_POST['annot_book'])."',
  7.            descr_book = '".es($_POST['descr_book'])."'");
  8.     $id_book= DB::_()->insert_id;
  9.     $a_f_author = array();
  10.     foreach($_POST['FIO_author'] as $key=>$value){
  11.     $f = array(0=>'NULL',1=>'"'.$value.'"',2=>'"'.$_POST['alias'][$key].'"');
  12.     $a_f_author[] = '(' . implode(',', $f) . ')';}
  13.     $sql2 = "INSERT INTO author_book (id_author,FIO,alias) VALUES" .implode(',', $a_f_author);
  14.     echo wtf($sql2);
  15. //Результат без запроса,просто вывод на экран:
  16. INSERT INTO author_book (id_author,FIO,alias) VALUES(NULL,"Ибрагимов","Ибра"),(NULL,"Файзуллин","Фейз")


Книга - Связующая таблица - Автор.

Добавил автора к таблица Автор
Добавил книгу к таблице Книга.

Но не могу понять как добавить id двух авторов к Связующей таблице?..
 
 Top
Мелкий Супермодератор
Отправлено: 06 Мая, 2014 - 19:05:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Для этого надо узнать id добавленных авторов.
insert_id отдаст только последний.
Следовательно надо или:
0) делать insert в цикле и запоминать id. Поскольку запись операция редкая - запросы в цикле здесь оправданы.
1) или искать только что добавленные строки. Удобно, если есть уникальный индекс. Тогда можно сразу insert ... select'ом переписать в таблицу связей.

Если речь неожиданно не о mysql, а о postgres - то insert ... returning


-----
PostgreSQL DBA
 
 Top
Fsingle
Отправлено: 06 Мая, 2014 - 22:05:39
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Мелкий пишет:
Для этого надо узнать id добавленных авторов.
insert_id отдаст только последний.
Следовательно надо или:
0) делать insert в цикле и запоминать id. Поскольку запись операция редкая - запросы в цикле здесь оправданы.
1) или искать только что добавленные строки. Удобно, если есть уникальный индекс. Тогда можно сразу insert ... select'ом переписать в таблицу связей.

Если речь неожиданно не о mysql, а о postgres - то insert ... returning

пытался сделать второй вариант,все равно не вышло...
PHP:
скопировать код в буфер обмена
  1. $sql = q("INSERT INTO book SET
  2.        id_book = '',
  3.                 date_add = '".es(date('Y-m-d H:i:s'))."',              
  4.        title_book = '".es($_POST['title_book'])."',
  5.                 annot_book = '".es($_POST['annot_book'])."',
  6.                 descr_book = '".es($_POST['descr_book'])."'");
  7. $id_book= DB::_()->insert_id;
  8. $a_f_author = array();
  9. foreach($_POST['FIO_author'] as $key=>$value){
  10. $f = array(0=>'NULL',1=>'"'.$value.'"',2=>'"'.$_POST['alias'][$key].'"');
  11. $a_f_author[] = '(' . implode(',', $f) . ')';}
  12. $sql2 = "INSERT INTO author_book (id_author,FIO,alias) VALUES";
  13. $sql2 .= implode(',', $a_f_author);
  14. $sql3 = q($sql2);
  15. $sql4 = "INSERT INTO book_and_author (id_book,id_author) VALUES ($id_book,(SELECT id_author FROM author_book where id_author=LAST_INSERT_ID()))";
  16. $sql5 = q($sql4);
 
 Top
Мелкий Супермодератор
Отправлено: 07 Мая, 2014 - 09:26:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




В случае, если уникальный индекс по FIO, то так:
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO book_and_author (id_book,id_author) SELECT $id_book, id_author FROM author_book WHERE FIO IN ('автор1', 'автор два');


Но лучше первый вариант - его проще сопровождать.


-----
PostgreSQL DBA
 
 Top
Fsingle
Отправлено: 07 Мая, 2014 - 19:45:57
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Мелкий пишет:
Для этого надо узнать id добавленных авторов.
insert_id отдаст только последний.
Следовательно надо или:
0) делать insert в цикле и запоминать id. Поскольку запись операция редкая - запросы в цикле здесь оправданы.
1) или искать только что добавленные строки. Удобно, если есть уникальный индекс. Тогда можно сразу insert ... select'ом переписать в таблицу связей.

Если речь неожиданно не о mysql, а о postgres - то insert ... returning


Извиняюсь,но не смог 0 вариант сделать..Может подскажете более детально?..
 
 Top
ПТО
Отправлено: 19 Мая, 2014 - 13:15:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 395
Дата рег-ции: Янв. 2012  


Помог: 3 раз(а)




Fsingle пишет:
Мелкий пишет:
Для этого надо узнать id добавленных авторов.
insert_id отдаст только последний.
Следовательно надо или:
0) делать insert в цикле и запоминать id. Поскольку запись операция редкая - запросы в цикле здесь оправданы.
1) или искать только что добавленные строки. Удобно, если есть уникальный индекс. Тогда можно сразу insert ... select'ом переписать в таблицу связей.

Если речь неожиданно не о mysql, а о postgres - то insert ... returning


Извиняюсь,но не смог 0 вариант сделать..Может подскажете более детально?..

СУБД Postgres имеет навороты практически наравне с Oracle, но в отличии от него является бесплатной. Например, можно сделать вставку[удаление, изменение] и вернуть получившийся результат:
Insert into mytable (field1, filed2) VALUES ('value1','value2') Returning *;
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB