0

显示的人的照片只是假数据。 这是我的表结构

编号 | 作者 | 合著者

1 | 罗尼 | vinay, gopal, arun
2 |高分辨率照片| CLIPARTO 剃须刀 | karthick, 韦伯斯特, 明
3 | 塔兹 | 伯爵, karthick, vinay
4 | 男爵 | 戈帕尔、阿伦、桑吉夫

现在我要选择两个作者,分别是 ronnie 和 baron,所以现在应该比较他们的共同作者。在这种情况下,匹配项是 gopal, arun,所以输出应该是 gopal 和 arun。

如何在mysql查询中做到这一点。请帮忙。

4

2 回答 2

2

这是您项目的建议结构。可能是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 |

这就是你想要做的。

注意is和is 的AND a.id in (1,4);位置:id 1Ronnieid 4Baron

查询 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 |
于 2013-09-19T03:16:02.220 回答
0

尝试这样的事情:

一个名为 Authors 的表(将所有作者和共同作者放在此表中)

id  |  Author
1   |  Bob
2   |  Jim
3   |  Sally
4   |  Joan

然后是作者之间的关系表

id  |  authorid  |  coauthorid
1   |  1         |  4
2   |  2         |  3
3   |  1         |  3

等等。每个作者/共同作者关系占一行。

于 2013-09-19T03:16:57.173 回答