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 が表示されます)
  • 一致しないものを除外します (共通していないものを削除します。この例では、削除 ID (55343、65324、および 43435) になります)
  • 重複する結果を削除します (同じアプリが 2 回表示されないようにする必要があります。そのため、appID 11122 は 1 回だけ表示されます)。

これが私がやろうとしていることのPHPの例です:

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

結果は「緑」と「赤」になります

これは MySQL で可能ですか?

4

2 に答える 2

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フィドル

アップデート:

共通ユーザー ID を 1 列だけに表示するかどうかはわかりません

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 に答える
0

私はあなたの質問を完全に理解しているとは確信していませんが、同じ appID に関連付けられているため (実際には 2 回)、userID 1 と 2 を返したいようです。もしそうなら、これはうまくいくはずです:

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 に答える