SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.07.2012 11:34:33

boomrest
Участник
Зарегистрирован: 04.07.2012
Сообщений: 1

Как составить запрос при связи "Многие ко многим"?

(классика) Есть 3 таблицы:
authors - список авторов книг
books - список книг
books_authors  - таблица связи авторов с книгами

---- Таблица authors ------
CREATE TABLE IF NOT EXISTS `authors` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `fio` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `authors` (`id`, `fio`) VALUES
(1, 'Николай Николаевич Носов'),
(2, 'Артур Конан Дойль'),
(3, 'Александр Сергеевич Пушкин');

---- Таблица books ------

CREATE TABLE IF NOT EXISTS `books` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

INSERT INTO `books` (`id`, `name`) VALUES
(1, 'Незнайка учится'),
(2, 'Незнайка-путешественник'),
(3, 'Винтик, Шпунтик и пылесос'),
(4, 'Затерянный мир'),
(5, 'Шерлок Холмс'),
(6, 'Руслан и Людмила'),
(7, 'Сказка о рыбаке и рыбке');

---- Таблица связей books_authors ------

CREATE TABLE IF NOT EXISTS `books_authors` (
  `id_book` int(11) NOT NULL,
  `id_author` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `books_authors` (`id_book`, `id_author`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(5, 2),
(7, 3),
(6, 3);

Подскажите плиз как составить запрос, чтобы для каждого автора выводился список книг через запятую. Знаю, что нужно использовать JOIN, GROUP BY + GROUP_CONCAT, но не знаю как именно. Я новичёк sad
Спасибо

Неактивен

 

#2 07.07.2012 16:44:17

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как составить запрос при связи "Многие ко многим"?

select a.fio,group_concat(b.name,',') FROM authors a JOIN books_authors ba ON a.id = ba.id_author JOIN books b ON ba.id_book=b.id GROUP BY a.id;
 


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson