Хочу сделать небольшой каталог с книгами/статьями. Будет две таблицы - одна с авторами и информацией о них, а другая - с книгами. Но поскольку у некоторых книг несколько авторов, то хочу сделать вспомогательную таблицу.
Нужно чтобы можно было добавить самому книгу/статью. При этом автор выбирается из уже существующих авторов (своя таблица), а id книги добавляется автоматически в таблицу Книги (автозаполнение).
В то же время в служебную таблицу сопоставления авторов и книг тут же должен заноситься id автора и id книги. Возникла проблема, как одновременно вставить в две таблицы записи, при том, что нужно определить id записи в первую таблицу, который формируется автоматически, чтобы тут же его вставить в id_book во второй таблице.
Спустя 23 минуты, 43 секунды (16.09.2010 - 20:04) Xpund написал(а):
Civilista
Ох и длинно тебе писать, но часть вот:
ТОк тебе бы ещё добавить, ФАМИЛИИ авторов, столбец.
Дальше некогда писать...
Ох и длинно тебе писать, но часть вот:
$query = mysql_query("INSERT INTO `book` (name,source,description,text) VALUE ($name,$source,$description,$text)");
$query2 = mysql_query("INSERT INTO `author` (id_author,id_book) VALUE ($id_author,$id_book)");
ТОк тебе бы ещё добавить, ФАМИЛИИ авторов, столбец.
Дальше некогда писать...
Спустя 10 минут, 22 секунды (16.09.2010 - 20:15) Civilista написал(а):
Если бы все было так просто...
Там три таблицы всего.
1. Авторы (мы уже их знаем, ничего нового на этом этапе в эту таблицу не заполняем, берем только id нужного автора)
2. Книги (нельзя сделать поле id_author, т.к. не известно сколько может оказаться авторов - может и один, а может и десять).
3. Таблица книги-авторы (потому как и у автора может быть куча книг, и у книги может быть куча авторов).
Выкладываю примерный вид всех трех таблиц (хотя с таблицей author делать ничего не надо будет, записи в нее этой формой не вставляются).
Там три таблицы всего.
1. Авторы (мы уже их знаем, ничего нового на этом этапе в эту таблицу не заполняем, берем только id нужного автора)
2. Книги (нельзя сделать поле id_author, т.к. не известно сколько может оказаться авторов - может и один, а может и десять).
3. Таблица книги-авторы (потому как и у автора может быть куча книг, и у книги может быть куча авторов).
Выкладываю примерный вид всех трех таблиц (хотя с таблицей author делать ничего не надо будет, записи в нее этой формой не вставляются).
Спустя 3 минуты, 42 секунды (16.09.2010 - 20:18) Civilista написал(а):
$query = mysql_query("INSERT INTO `book` (name,source,description,text) VALUE ($name,$source,$description,$text)");
$query2 = mysql_query("INSERT INTO `book_author` (id_author,id_book) VALUE ($id_author,ОТКУДА ВЗЯТЬ id КНИГИ, КОТОРУЮ ВСТАВИЛИ ВЫШЕ В $query????)");
Спустя 11 минут, 11 секунд (16.09.2010 - 20:30) FatCat написал(а):
Цитата (Civilista @ 16.09.2010 - 21:15) |
Книги (нельзя сделать поле id_author, т.к. не известно сколько может оказаться авторов - может и один, а может и десять) |
Текстовое поле, писать айдишники через запятую. Это удобно для подстановки в запрос. Если нужен массив - эксплодить.
Спустя 5 минут, 15 секунд (16.09.2010 - 20:35) Xpund написал(а):
$query = mysql_query(SELECT * FROM `book`);
$row = mysql_fetch_array($query);
$row['name'];
Ну вот приблизительно.
$row = mysql_fetch_array($query);
$row['name'];
Ну вот приблизительно.
Спустя 12 минут, 19 секунд (16.09.2010 - 20:47) Civilista написал(а):
FatCat
То есть Вы предлагаете не пользоваться вспомогательной таблицей?
Просто мне нужно будет, чтобы еще на страничке с автором выводились ссылки на его книги (соответственно, нужно будет искать в таблице book записи с этим автором). Можно будет это потом сделать?
Xpund
Прошу прощения за непонятливость...
А зачем из таблицы book поле с названием книжки вытаскивать?
То есть Вы предлагаете не пользоваться вспомогательной таблицей?
Просто мне нужно будет, чтобы еще на страничке с автором выводились ссылки на его книги (соответственно, нужно будет искать в таблице book записи с этим автором). Можно будет это потом сделать?
Xpund
Прошу прощения за непонятливость...
А зачем из таблицы book поле с названием книжки вытаскивать?
Спустя 16 минут, 27 секунд (16.09.2010 - 21:04) Xpund написал(а):
Civilista
Я привет показал, вытаскивайте то что вам нужно, можно с WHERE id_book и тп
Я привет показал, вытаскивайте то что вам нужно, можно с WHERE id_book и тп
Спустя 12 минут, 30 секунд (16.09.2010 - 21:16) Nord написал(а):
Цитата (Civilista) |
ОТКУДА ВЗЯТЬ id КНИГИ, КОТОРУЮ ВСТАВИЛИ ВЫШЕ В $query????)"); |
Можно взять отсюда: mysql_insert_id()
$query = mysql_query("INSERT INTO `book` (name,source,description,text) VALUE ($name,$source,$description,$text)");
$id_book = mysql_insert_id();
$query2 = mysql_query("INSERT INTO `author` (id_author,id_book) VALUE ($id_author,$id_book)");
Спустя 3 часа, 16 минут, 55 секунд (17.09.2010 - 00:33) FatCat написал(а):
Цитата (Civilista @ 16.09.2010 - 21:47) |
мне нужно будет, чтобы еще на страничке с автором выводились ссылки на его книги (соответственно, нужно будет искать в таблице book записи с этим автором). Можно будет это потом сделать? |
Автору, соответственно, тоже текстовое поле book_id, и в нем через запятую айдишники книг.
Спустя 2 минуты, 32 секунды (17.09.2010 - 00:36) FatCat написал(а):
Кстати, твоя система из трех баз наверное лучше. Только я бы иначе расставил акценты.
Не вспомогательная таблица, а таблица изданий - это основная таблица. А к ней джойнятся таблицы данных по авторам и данных по книгам.
Не вспомогательная таблица, а таблица изданий - это основная таблица. А к ней джойнятся таблицы данных по авторам и данных по книгам.
Спустя 1 день, 19 часов, 41 секунда (18.09.2010 - 19:36) Civilista написал(а):
Цитата (Nord @ 16.09.2010 - 18:16) | ||
Можно взять отсюда: mysql_insert_id()
|
Вот это как раз то, что нужно!
Работает!
Спасибо всем за советы!
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)