我使用的是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选择引用对象,例如,我将获取对象id1并获取其项,因此在我的代码中,我将获得:
$object_id = 1;
$item_ids = [2, 3, 4];

现在我想让所有的object_id都有相同的item_id组。所以在这里我需要得到object_id 3 and 6,因为它们都比对象1有相同的item_id
另一个例子,如果引用中有object_id2,则不会得到结果,因为没有具有相同组id的行。
使用SQL查询可以做到这一点,还是必须在代码中做到这一点?

最佳答案

是的,通过连接似乎是可能的,这里是:

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
)

08-27 10:46