みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テーブルをまたいだ検索

このような検索をしたいのですが・・・
書籍のデータベースを作っていて、
本の著者は共著の場合など、複数の場合があるので、
著者テーブルを別に作りました。

books

id, title, publisher
1, AAA, A出版
2, BBB, B出版
3, CCC, C出版

authors(著者)テーブル

id, author
1, 田中
2, 佐藤
3, 鈴木
3, 後藤

そして、検索フォームで著者名から検索したいのですが、
どのようにするのが普通なのでしょうか。
「author」テーブルからフォームで入力した「著者名」を検索して、
その後、そのIDをもつ書籍を「books」から引っ張ってくるというイメージなのですが・・・
たとえば著者名に「佐藤」と検索すると「CCC」という本が見つかるようにしたいのです。
また、書籍タイトル、著者名、出版社名を組み合わせて検索できるようにしたいのです。
これはクエリの組み立て方で解決できるのでしょうか?
Mysqlのビューという機能を使って解決することはできるのでしょうか?

長くてわかりにくい文章になってしまいましたが、
どうかよろしくお願いします。

投稿日時 - 2008-03-06 12:46:00

QNo.3837808

すぐに回答ほしいです

質問者が選んだベストアンサー

booksテーブルとauthorsテーブルのリレーションを考えないといけません。

1冊の本に複数人のauthorがいた場合はどうするのでしょうか?
authorsテーブルのauthorに複数人の名前を入れるのでしょうか?

たとえば、もう一つテーブルを追加してみます。
book2authorテーブル
book2author_id serial primary_key,
book_id int,
author_id int
とする事で、booksテーブルとauthorsテーブルを結びつけるための
テーブルを用意します。

で、データとしては、
1,3,2
というデータを用意すれば、佐藤さんとCCCは結びつきます。

投稿日時 - 2008-03-06 13:05:08

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

booksテーブルにauthorsテーブルをinner joinすればよいのでは?
ちなみに佐藤さんのidは2でそこに紐づく書籍はBBBのように
思えるのですが、CCCであるというのは勘違い?もしくはなにか意図があるのですか?

それと実際に運用する際には別途さらにPersonテーブルみたいな
テーブルをつくり、個人の情報を管理することになると思います。
authorsテーブルは性質上中間テーブルですね。

投稿日時 - 2008-03-06 13:18:02

補足

おっしゃるとおり、「佐藤」はミスです;
「後藤」と検索したら「CCC」という本が見つかるということでした。

著者に関する情報はとくに必要なく、
たんなる検索用のキーとして著者名のみあればよいのですが、
テーブルふたつだけでは問題があるのでしょうか?

よろしくお願いします。

投稿日時 - 2008-03-06 13:28:53

あなたにオススメの質問