Консультация № 125589
01.03.2008, 19:17
0.00 руб.
0 2 2
Подскажите пожалуйста, как и что можно сделать?

есть две таблицы authors и books
В них поля:
id, author_name
book_title, authors_id
соответственно.

Нужно, чтобы можно было у книги посмотреть всех её авторов (может быть несколько имён).

И найти книги одного конкретного автора (у них тоже может быть несколько книг).

Всё очень упрощаю, но суть осталась прежней.
Я делал так:

в поле authors_id сохранял строчку, где перечисляются все идентификаторы авторов, заключенные в скобки.
Таким образом я могу разобрав эту строчку перечислить всех авторов.
А сделав поиск идентификатора в скобках найти книги написанные нужным автором.
Но может быть есть, что-то более специальное?

Сейчас использую ado к acces, но это же касаеться и mysql.

Обсуждение

Неизвестный
01.03.2008, 19:44
общий
это ответ
Здравствуйте, Талипов А Н!
я бы сделал следующим образом:
в таблицу books добавил бы поле id_book и удалил бы поле authors_id.
Создал бы еще одну таблицу, скажем books_autors c полями id_book и id_autor.
Тогда книги автора:
select a.* from books a, books_autors b, authors c where b.id_book=a.id_book and c.id=b.id_autor and c.author_name="Петров Петр Петрович";
авторы книги:
select с.* from books a, books_autors b, authors c where b.id_book=a.id_book and c.id=b.id_autor and a.book_title="Программирование от А до Я";
Неизвестный
01.03.2008, 20:34
общий
это ответ
Здравствуйте, Талипов А Н!

Присоединяюсь к ответу Yurio,
но с небольшими добавлениями:

1)Видоизменил запрос на получение книг автора:
select b.book_title
from authors a, books_authors ba, books b
where a.author_name="Петров Петр Петрович"
and a.author_id=ba.author_id and ba.book_id=b.book_id
order by b.book_title
Смысл этой операции состоит в:
-получении упорядоченного по алфавиту списка книг
-получении более эффективного запроса, так как мы
производим не соединение всех соответствующих строк всех таблиц
и потом отбираем нужные, а соединяем только те строки таблиц,
которые относятся к указанному автору.

2)Аналогично для получения авторов книги:
select a.author_name
from books b, books_authors ba, authors a
where b.book_title="Программирование от А до Я
and b.book_id=ba.book_id and ba.author_id=a.author_id
order by a.author_name

Форма ответа