- ベストアンサー
テーブルをまたいだ検索
このような検索をしたいのですが・・・ 書籍のデータベースを作っていて、 本の著者は共著の場合など、複数の場合があるので、 著者テーブルを別に作りました。 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のビューという機能を使って解決することはできるのでしょうか? 長くてわかりにくい文章になってしまいましたが、 どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
booksテーブルとauthorsテーブルのリレーションを考えないといけません。 1冊の本に複数人のauthorがいた場合はどうするのでしょうか? authorsテーブルのauthorに複数人の名前を入れるのでしょうか? たとえば、もう一つテーブルを追加してみます。 book2authorテーブル book2author_id serial primary_key, book_id int, author_id int とする事で、booksテーブルとauthorsテーブルを結びつけるための テーブルを用意します。 で、データとしては、 1,3,2 というデータを用意すれば、佐藤さんとCCCは結びつきます。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
booksテーブルにauthorsテーブルをinner joinすればよいのでは? ちなみに佐藤さんのidは2でそこに紐づく書籍はBBBのように 思えるのですが、CCCであるというのは勘違い?もしくはなにか意図があるのですか? それと実際に運用する際には別途さらにPersonテーブルみたいな テーブルをつくり、個人の情報を管理することになると思います。 authorsテーブルは性質上中間テーブルですね。
補足
おっしゃるとおり、「佐藤」はミスです; 「後藤」と検索したら「CCC」という本が見つかるということでした。 著者に関する情報はとくに必要なく、 たんなる検索用のキーとして著者名のみあればよいのですが、 テーブルふたつだけでは問題があるのでしょうか? よろしくお願いします。