これは、プロジェクトの推奨構造です。あなたのケースでは、著者や共著者が関連するものでarticles
はなく、テーブルになるかもしれません。books
このようにして、後でデータのクエリを実行するのがはるかに簡単になります:
SQL フィドル
MySQL 5.5.32 スキーマのセットアップ:
CREATE TABLE books
(`id` int, `title` varchar(5));
INSERT INTO books
(`id`, `title`)
VALUES
(1, 'book1'),
(2, 'book2'),
(3, 'book3'),
(4, 'book4');
CREATE TABLE authors
(`id` int, `name` varchar(8));
INSERT INTO authors
(`id`, `name`)
VALUES
(1, 'Ronnie'),
(2, 'Razor'),
(3, 'Taz'),
(4, 'Baron'),
(5, 'vinay'),
(6, 'karthick'),
(7, 'earl'),
(8, 'gopal'),
(9, 'webster'),
(10, 'karthick'),
(11, 'arun'),
(12, 'ming'),
(13, 'sanjeev');
CREATE TABLE type
(`id` int, `type` varchar(9));
INSERT INTO type
(`id`, `type`)
VALUES
(1, 'author'),
(2, 'co-author');
CREATE TABLE wrote
(`id` int, `book_id` int, `author_id` int, `type_id` int);
INSERT INTO wrote
(`id`, `book_id`, `author_id`, `type_id`)
VALUES
(1, 1, 1, 1),
(2, 2, 2, 1),
(3, 3, 3, 1),
(4, 4, 4, 1),
(5, 1, 5, 2),
(6, 2, 6, 2),
(7, 3, 7, 2),
(8, 4, 8, 2),
(9, 1, 8, 2),
(10, 2, 9, 2),
(11, 3, 10, 2),
(12, 4, 11, 2),
(13, 1, 11, 2),
(14, 2, 12, 2),
(15, 3, 5, 2),
(16, 4, 13, 2);
これはあなたの実際のデータです:
クエリ 1 :
SELECT b.id, a.name as author, group_concat(co.name) as co_authors
FROM books b
INNER JOIN wrote wa ON wa.book_id = b.id AND wa.type_id = 1
INNER JOIN authors a ON wa.author_id = a.id
INNER JOIN wrote wco ON wco.book_id = b.id AND wco.type_id = 2
INNER JOIN authors co ON wco.author_id = co.id
GROUP BY b.title, a.name
結果:
| ID | AUTHOR | CO_AUTHORS |
|----|--------|-----------------------|
| 1 | Ronnie | arun,vinay,gopal |
| 2 | Razor | webster,ming,karthick |
| 3 | Taz | earl,karthick,vinay |
| 4 | Baron | sanjeev,gopal,arun |
これがあなたがやろうとしていることです。
とがAND a.id in (1,4);
どこにid 1
あるかに注意してください。Ronnie
id 4
Baron
クエリ 2 :
SELECT co.name as coauthor
FROM books b
INNER JOIN wrote wa ON wa.book_id = b.id AND wa.type_id = 1
INNER JOIN authors a ON wa.author_id = a.id AND a.id in (1,4)
INNER JOIN wrote wco ON wco.book_id = b.id AND wco.type_id = 2
INNER JOIN authors co ON wco.author_id = co.id
GROUP BY co.name
HAVING count(co.name) > 1
結果:
| COAUTHOR |
|----------|
| arun |
| gopal |