次の基準を満たすクエリを作成する方法を見つけようとしています。
私は2つのテーブルを持っています。テーブルa
には著者のリストが格納されます。テーブルb
には書籍のリストが格納されます。c
すべての著者を 1 つ以上の本にマップする linking tableがあります。当然のことながら、本には複数の著者がいる場合があります。著者の名前 (name = "Douglas Adams" としましょう) が与えられた場合、
SELECT * FROM linktable
INNER JOIN a ON linktable.a_id = a.id
INNER JOIN b ON linktable.p_id = b.id
WHERE a.name = 'Douglas Adams';
ダグラス・アダムスが書いた本はすべて手に入れます。ダグラス・アダムスには時々「共著者」がいたとしましょう。どうすれば入手できますか?
どういうわけか次のようなリストが必要です:
Douglas Adams, The Hitchhiker's Guide to the Galaxy, maybe more details...
Douglas Adams, Book_2, maybe more details...
Coauthor_1, Book_2, same Details as in "Douglas Adams, Book_2, maybe more details..."
これは実行可能ですか?
保存したいものと取得したいものをマップする 3 つのテーブルを作成しました。
2 つのストレージ テーブルは次のとおりです。
CREATE TABLE `a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name_UNIQUE` (`name`),
KEY `name_INDEX` (`name`),
FULLTEXT KEY `name_FULLTEXT` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=932723 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
CREATE TABLE `b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `title_fulltext` (`title`)
) ENGINE=MyISAM AUTO_INCREMENT=1617432
上の 2 つのテーブルをリンクする 3 番目のテーブル。
CREATE TABLE `linktable` (
`a_id` int(11) NOT NULL,
`b_id` int(11) NOT NULL,
KEY `a_id_INDEX` (`a_id`),
KEY `b_id_INDEX` (`b_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci