Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用两个不同的ID php mysql比较逗号分隔的值和_Php_Mysql_Sql_Optimization - Fatal编程技术网

如何使用两个不同的ID php mysql比较逗号分隔的值和

如何使用两个不同的ID php mysql比较逗号分隔的值和,php,mysql,sql,optimization,Php,Mysql,Sql,Optimization,显示的人的照片只是伪造的数据。 这是我的桌子结构 id |作者|共同作者 1|罗尼|维奈、戈帕尔、阿伦 2 | Razor | karthick,韦伯斯特,明 3 |塔兹|伯爵、卡迪希、维奈 4 |男爵|戈帕尔、阿伦、桑吉耶夫 现在我想选择两位作者,比如ronnie和baron,所以现在应该对他们的合著者进行比较。在这种情况下,匹配项是gopal和arun,因此输出应该是gopal和arun 如何在mysql查询中做到这一点。请提供帮助。这是为您的项目建议的结构。在您的案例中,它可能是一个文章表

显示的人的照片只是伪造的数据。 这是我的桌子结构

id |作者|共同作者

1|罗尼|维奈、戈帕尔、阿伦
2 | Razor | karthick,韦伯斯特,明
3 |塔兹|伯爵、卡迪希、维奈
4 |男爵|戈帕尔、阿伦、桑吉耶夫

现在我想选择两位作者,比如ronnie和baron,所以现在应该对他们的合著者进行比较。在这种情况下,匹配项是gopal和arun,因此输出应该是gopal和arun


如何在mysql查询中做到这一点。请提供帮助。

这是为您的项目建议的结构。在您的案例中,它可能是一个
文章
表格,而不是
书籍
或与作者和合著者相关的任何其他内容。通过这种方式,在以下情况下,对您的数据进行查询将更加容易:

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);
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 |
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 |
这是您的实际数据:

查询1

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);
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 |
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 |

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);
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 |
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 |
这就是您要做的。

(1,4)中的注释
和a.id其中
ID1
Ronnie
ID4
Baron

查询2

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);
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 |
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 |

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);
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 |
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 |

试着这样做:

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

然后是作者之间的关系表

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

等等。每个作者/合著者关系对应一行。

您的表结构很糟糕。您应该有一个表结构,每个作者和他们所写的作品有一行。那么你的查询将更容易表达。是的,合著者也有不同ID的单独行。然后显示表结构。另外,选择你真正使用的数据库。我已经附上了屏幕截图,兄弟,你明白了吗?如果你看图片,有两个合著者匹配一个是sreeram,一个是frank kruzel,因此,只有这两位作者必须被显示。您能为我的问题提供一个mysql查询建议吗?您只需执行一个连接,就可以从作者表中的共同作者ID中获取作者ID。因此,您可以获取与作者相关的所有合著者id,并使用该id从作者表中获取名称。这很好,兄弟,但我也使用php,现在我完全困惑了。我对图书表感到困惑,因为我没有这些东西。它们有不同的主题区域,而不是
图书
,您将有一个
subject\u区域
tableYes-bro,但布局有所不同