所显示的人的照片只是假数据。 这是我的表结构
id |作者|共同作者
1 |罗尼| vinay,gopal,arun
2 |剃刀|卡斯蒂克,韦伯斯特,明星
3 |塔兹|伯爵,karthick,vinay
4 |男爵| gopal,arun,sanjeev
现在我想选择两个作者说ronnie和baron,所以现在应该比较他们的共同作者。在这种情况下,匹配将是gopal,arun所以输出应该是gopal和arun。
如何在mysql查询中执行此操作。请帮忙。
答案 0 :(得分:2)
这是您项目的建议结构。可能是您的案例中的articles
表,而不是books
或作者和共同作者所关联的任何其他内容。通过这种方式,在以下方面对数据进行查询会更容易:
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
<强> Results 强>:
| 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
<强> Results 强>:
| COAUTHOR |
|----------|
| arun |
| gopal |
答案 1 :(得分:0)
尝试这样的事情:
一个名为Authors的表(将所有作者和共同作者放在此表中)
id | Author
1 | Bob
2 | Jim
3 | Sally
4 | Joan
然后是作者之间关系的表格
id | authorid | coauthorid
1 | 1 | 4
2 | 2 | 3
3 | 1 | 3
等等。每个作者/共同作者关系一行。