1

我有一个似乎无法解决的问题。我有一个跟踪用户 ID 和应用 ID 的表。该表如下所示:

Library:
ID        userID       appID
1           1          11122            
2           1          65324
3           1          43435
4           2          43435
5           2          50645
6           2          34343
7           4          11122
8           4          55343

查询应执行以下操作:

  • 返回所选用户共有的所有 appID 值。(如果选择了用户 4 和用户 1,并且两者都有应用程序 11122,则应显示应用程序 11122)
  • 排除那些不匹配的(删除他们没有共同点的。在这个例子中,它将是删除 ids(55343、65324 和 43435)
  • 删除重复的结果(它不应该两次列出同一个应用程序。所以 appID 11122 应该只显示一次)

这是我正在尝试做的 PHP 示例:

    $array1 = array("a" => "green", "red", "blue");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_intersect($array1, $array2);

结果将是“绿色”和“红色”

这可以通过 MySQL 实现吗?

4

2 回答 2

0

我不确定我完全理解你的问题,但听起来你想返回 userID 1 和 2 因为它们与同一个 appID 相关联(实际上是两次)。如果是这样,那么这应该工作:

select L.userID, L.appID
from Library L
    join (
      select appID
      from Library
      group by appId
      having count(distinct userID) > 1
) L2 on L.appID = L2.appID

SQL 小提琴演示

如果您只需要唯一的用户 ID,请从上述查询中删除 appID 并添加 DISTINCT。

于 2013-03-24T01:11:47.680 回答
0

你可以试试这个:

select a.appID from Library a
inner join
(select appID,count(ID) as ctr from Library where userID in(1,4) group by appID) b on b.appID = a.appID
where b.ctr > 1
group by a.appID;

sql小提琴

更新:

我不确定您是否只想在 1 列中查看常用用户 ID

select a.appID,group_concat(a.userID) as user_ids from Library a
inner join
(select appID,count(ID) as ctr from Library where userID in(1,4) group by appID) b on b.appID = a.appID
where b.ctr > 1
group by a.appID;

SQL小提琴

于 2013-03-24T05:04:44.630 回答