Есть потребность в создание запроса который возвращал бы таблицу с полями
id_books | name_book | index_udc | index_bbk | autor | genre | проблема в том, что у книги могут быть несколько авторов и разные жанры, а это связь многие-к-многим.
Я составил запросы отдельно для запроса авторов, и жанров, но я в замешательстве как их объединить в одну таблицу.
select `librarydb`.`books`.*,
group_concat(`librarydb`.`autor`.autor_record)
from `librarydb`.`books`
join `librarydb`.`autor_join_table`
on `librarydb`.`autor_join_table`.id_books
= `librarydb`.`books`.id_books
join `librarydb`.`autor`
on `librarydb`.`autor`.id_autor
= `librarydb`.`autor_join_table`.id_autor
group by `librarydb`.`books`.id_books
select `librarydb`.`books`.*,
group_concat(`librarydb`.`genre`.genre_record)
from `librarydb`.`books`
join `librarydb`.`genre_join_table`
on `librarydb`.`genre_join_table`.id_books
= `librarydb`.`books`.id_books
join `librarydb`.`genre`
on `librarydb`.`genre`.id_genre
= `librarydb`.`genre_join_table`.id_genre
group by `librarydb`.`books`.id_books;
База данных
CREATE DATABASE librarydb;
USE librarydb;
CREATE TABLE `librarydb`.`autor` (
`id_autor` int(11) NOT NULL AUTO_INCREMENT,
`autor_record` varchar(256) NOT NULL,
PRIMARY KEY (`id_autor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`autor` VALUES
(1, 'Arkady Natragovich Strugatsky')
,(2, 'Boris Natragovich Strugatsky')
,(3, 'Andrzej Sapkowski');
-- Autor join table
CREATE TABLE `librarydb`.`autor_join_table` (
`id_books` int(11) NOT NULL,
`id_autor` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`autor_join_table` VALUES
(1, 1),
(1, 2),
(2, 3);
CREATE TABLE `librarydb`.`genre` (
`id_genre` int(11) NOT NULL AUTO_INCREMENT,
`genre_record` varchar(256) NOT NULL,
PRIMARY KEY (`id_genre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`genre` VALUES
(1, 'fantasy'),
(2, 'Science fiction');
-- Genre join table
CREATE TABLE `librarydb`.`genre_join_table` (
`id_books` int(11) NOT NULL,
`id_genre` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`genre_join_table` VALUES
(1, 1),
(1, 2),
(2, 1);
CREATE TABLE `librarydb`.`bbk` (
`id_bbk` int(11) NOT NULL AUTO_INCREMENT,
`bbk_record` varchar(256) NOT NULL,
PRIMARY KEY (`id_bbk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`bbk` VALUES
(1, 'bbk-abc123'),
(2, 'bbk-cba321');
CREATE TABLE `librarydb`.`udc` (
`id_udc` int(11) NOT NULL AUTO_INCREMENT,
`udc_record` varchar(256) NOT NULL,
PRIMARY KEY (`id_udc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`udc` VALUES
(1, 'udc-abc123'),
(2, 'udc-cba321');
CREATE TABLE `librarydb`.`books` (
`id_books` int(11) NOT NULL AUTO_INCREMENT,
`name_book` varchar(256) DEFAULT NULL,
-- `autor` int(11) DEFAULT NULL,
-- `genre` int(11) DEFAULT NULL,
`index_udc` int(11) DEFAULT NULL,
`index_bbk` int(11) DEFAULT NULL,
PRIMARY KEY (`id_books`),
FOREIGN KEY (index_udc) REFERENCES udc(id_udc),
FOREIGN KEY (index_bbk) REFERENCES bbk(id_bbk)
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
INSERT INTO `librarydb`.`books` VALUES
(1, 'STALKER', 1, 1),
(2, 'WITCHER', 2, 2);
select `librarydb`.`books`.*,
group_concat(DISTINCT `librarydb`.`autor`.autor_record),
group_concat(DISTINCT `librarydb`.`genre`.genre_record)
from `librarydb`.`books`
join `librarydb`.`autor_join_table`
on `librarydb`.`autor_join_table`.id_books
= `librarydb`.`books`.id_books
join `librarydb`.`autor`
on `librarydb`.`autor`.id_autor
= `librarydb`.`autor_join_table`.id_autor
join `librarydb`.`genre_join_table`
on `librarydb`.`genre_join_table`.id_books
= `librarydb`.`books`.id_books
join `librarydb`.`genre`
on `librarydb`.`genre`.id_genre
= `librarydb`.`genre_join_table`.id_genre
group by `librarydb`.`books`.id_books;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При наличии обычного div и при position: -webkit-sticky; все отлично на сафари работает, но когда div кидается в div ничего не работает, прошу помощи