[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вспомогательная таблица
Civilista
Посоветуйте, пожалуйста, как лучше эту идею реализовать.
Хочу сделать небольшой каталог с книгами/статьями. Будет две таблицы - одна с авторами и информацией о них, а другая - с книгами. Но поскольку у некоторых книг несколько авторов, то хочу сделать вспомогательную таблицу.
Нужно чтобы можно было добавить самому книгу/статью. При этом автор выбирается из уже существующих авторов (своя таблица), а 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 делать ничего не надо будет, записи в нее этой формой не вставляются).

Спустя 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'];
Ну вот приблизительно.

Спустя 12 минут, 19 секунд (16.09.2010 - 20:47) Civilista написал(а):
FatCat
То есть Вы предлагаете не пользоваться вспомогательной таблицей?
Просто мне нужно будет, чтобы еще на страничке с автором выводились ссылки на его книги (соответственно, нужно будет искать в таблице book записи с этим автором). Можно будет это потом сделать?
Xpund
Прошу прощения за непонятливость...
А зачем из таблицы book поле с названием книжки вытаскивать?

Спустя 16 минут, 27 секунд (16.09.2010 - 21:04) Xpund написал(а):
Civilista
Я привет показал, вытаскивайте то что вам нужно, можно с 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)
Цитата (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)");


Вот это как раз то, что нужно!
Работает!
Спасибо всем за советы! biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.