2012-02-08 14 views
0

この2つのクエリをマージできるかどうかを知りたいのですが、クエリの内容について少し説明します。php mysql query join merge

これは私のテーブル構造である:

  • ユーザー:ID、名前
  • usersFacebookFriends:ID、説明、日付、時間
  • activitiesUsers:ID、uidが、
  • 活動friendUid IDを、 activityId、uid

私たちはユーザーを持っているので、ユーザーは友達がいて、ユーザーはアクティビティを作成でき、複数のユーザーが行動することができますivities。それがはっきりしていることを望む

SELECT DISTINCT 
    A.description, A.date, A.time 
FROM 
    usersFacebookFriends UF 
JOIN 
    activitiesUsers AF 
ON 
    AF.uid = UF.friendUid 
JOIN 
    activities A 
ON 
    A.id = AF.activityId 
WHERE 
    UF.uid = :uid 

クエリのuidパラメータは、明らかにユーザーIDです。すべての活動を通じ

foreach($activities as $activity){ 
    // SELECT 
    //  U.id, U.name, U.firstName, U.level 
    // FROM 
    //  activitiesUsers AF 
    // JOIN 
    //  users U 
    // ON 
    //  U.id = AF.uid 
    // WHERE 
    //  AF.activityId = ? 
} 

だから、そのちょっと重、私はまだループ彼らは最初のクエリでフェッチされ、その後、私はすべてのユーザーを取得した後、それが可能である:そのクエリの実行後、私は現在、これを行いますこれらのクエリをマージするので、すべてのアクティビティを取得した後にループする必要はありません。ヘルプ

答えて

2
SELECT 
    A.description, A.date, A.time,U.id, U.name, U.firstName, U.level 
FROM 
    usersFacebookFriends UF, activitiesUsers AF, activities A, users U 
WHERE 
    UF.uid = :uid AND UF.friendUid=AF.uid AND AF.activityId=A.id AND AF.uid=U.id ; 

ため

おかげでこれはトリックを行う必要があります。

+0

動作していないため、複数のユーザーが1つのアクティビティを検出できます。 – randomKek

+0

@MikeVercoelen「働いていない」とはどういう意味ですか? – dgw

+0

クエリが機能していますが、私が言ったように、アクティビティには複数のユーザーがリンクすることができます。その結果、クエリを実行すると多くの結果が得られます。 – randomKek