Я пытаюсь выяснить, как построить запрос, который удовлетворяет следующим критериям:
У меня есть две таблицы.Таблица a
хранит список авторов.А таблица b
хранит список книг.У меня есть таблица ссылок c
, которая отображает каждого автора на одну или несколько книг.Естественно, книга может иметь более одного автора.Учитывая имя (давайте назовем имя = "Дуглас Адамс") автора, я знаю, что если я сделаю
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
и одна третья таблица, которая связывает две таблицы выше.
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