首页 > 解决方案 > MySQL选择具有相同组id的所有行

问题描述

我正在使用 MySql 5.7.18 和 PHP 7。

我有这张桌子:

id | object_id | item_id
-------------------------
1       1          2
2       1          3
3       1          4

4       2          5
5       2          3

6       3          2
7       3          3
8       3          4

9       4          2

10      5          1
11      5          3
12      5          5

13      6          2
14      6          3
15      6          4

所以我需要通过 id 选择参考对象,例如我将获取 object_id1并获取他的项目,所以在我的代码中我会得到:

$object_id = 1;
$item_ids = [2, 3, 4];

现在我想得到所有object_id拥有相同组的item_id. 所以在这里我需要得到,object_id 3 and 6因为它们都与item_id对象 1 相同。

另一个示例,如果我有object_id2 参考,我将不会得到任何结果,因为没有具有相同组 ID 的行。

可以使用 SQL 查询来做到这一点,还是我必须在我的代码中做到这一点?

标签: phpmysql

解决方案


是的,它似乎可以通过连接来实现,这里是:

select a.* from (
    select object_id, group_concat(item_id order by id separator '-') as item_list 
    from test group by object_id
) a where a.item_list = '2-3-4'

这是小提琴:

http://sqlfiddle.com/#!9/6360bc/6


如果要按对象 ID 查询:

select a.* from (
    select object_id, group_concat(item_id order by id separator '-') as item_list 
    from test group by object_id
) a where a.item_list = (
    select group_concat(item_id order by id separator '-') 
    from test where object_id = 1
)

推荐阅读