Как Составить Запрос К Трём Таблицам (многие Ко Многим)

Тема в разделе "SQL", создана пользователем NeznaJka, 5 июл 2012.

Статус темы:
Закрыта.
  1. NeznaJka

    NeznaJka Гость

    (классика) Есть 3 таблицы:
    authors - список авторов книг
    books - список книг
    books_authors - таблица связи авторов с книгами
    ---- Таблица authors ------
    Код (Text):
    CREATE TABLE IF NOT EXISTS `authors` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `fio` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4;

    INSERT INTO `authors` (`id`, `fio`) VALUES
    (1, 'Николай Николаевич Носов'),
    (2, 'Артур Конан Дойль'),
    (3, 'Александр Сергеевич Пушкин');
    ---- Таблица books ------
    Код (Text):
    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=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8;

    INSERT INTO `books` (`id`, `name`) VALUES
    (1, 'Незнайка учится'),
    (2, 'Незнайка-путешественник'),
    (3, 'Винтик, Шпунтик и пылесос'),
    (4, 'Затерянный мир'),
    (5, 'Шерлок Холмс'),
    (6, 'Руслан и Людмила'),
    (7, 'Сказка о рыбаке и рыбке');
    ---- Таблица связей books_authors ------
    Код (Text):
    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, но не знаю как именно. Ни как не соображу. Я новичёк :blink:
    Спасибо

    Меня хватило только на:
    Код (Text):
    SELECT authors.id, authors.fio, books_authors.id_book AS books, GROUP_CONCAT('books')
    FROM
    authors
    INNER JOIN
    books_authors
    ON authors.id = books_authors.id_author
    GROUP BY fio
    ... но выводит только book,book,book
    Подскажите, люди добрые

    Добавлено: Модераторам
    Удалите повторяющиеся топики, я извиняюсь. При создании вылезла ошибка в вашем скрипте и я нажал кнопку обновить (сори)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей