2016-10-27 31 views
1

現在のユーザーの投稿と彼がフォローしている人の投稿を取得しようとしています。ほとんどのソーシャルネットワークのように、彼らのホームページにあります。MYSQLクエリ - 現在のユーザーの投稿と彼の投稿に続いているユーザーを取得します

私はすべての現在のユーザーの投稿を照会する方法を知っていますが、私は彼が自分の投稿をフォローしていることを苦労しています。

私は、この他の質問Mysql select query for getting current user post and followed friend post

を見たが、答えは私を助け実際にそこではありません...

ここだが、これまで私のクエリです:

SELECT P.id, 
P.caption, 
P.date, 
U.id, 
U.fullname, 
U.username, 
F.IdOtherUser 
FROM USERS AS U 
INNER JOIN Activity AS F 
ON U.id = F.id 
INNER JOIN Posts AS P 
ON P.id = U.id OR P.id = F.IdOtherUser 
WHERE P.id = 145 
ORDER BY P.id DESC 

145 =現在のユーザー。誰もが、私はたくさんそれを感謝し、私はこれを並べ替えることができます場合は

Activity.IdOtherUserは、ユーザ145は、 '=

Activity.idに従っている=は「145」は、現在のユーザー

になります!

修正

(SELECT P.id as postid, 
     P.caption, 
     P.date, 
     U.id as userid, 
     U.fullname, 
     U.username, 
     coalesce(Activity.LikeCNT,0), 
     Activity.CurrentUserLiked 
     FROM USERS AS U 
     INNER JOIN Posts AS P 
     ON P.id = U.id 
     LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = 145 then 1 else 0 end) as CurrentUserLiked 
     FROM Activity Activity 
     WHERE type = 'like' 
     GROUP BY Activity.uuidPost) Activity 
     ON Activity.uuidPost = P.uuid 
     AND Activity.id = U.id 
     WHERE U.id = 145) 
UNION 
(SELECT P.id, 
     P.caption, 
     P.date, 
     U.id, 
     U.fullname, 
     U.username, 
     coalesce(Activity.LikeCNT,0), 
     Activity.CurrentUserLiked 
     FROM Activity AS A 
     INNER JOIN USERS AS U 
     ON A.IdOtherUser=U.id 
     INNER JOIN Posts AS P 
     ON P.id = U.id 
     LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = 145 then 1 else 0 end) as CurrentUserLiked 
    FROM Activity Activity 
    WHERE type = 'like' 
    GROUP BY Activity.uuidPost) Activity 
    ON Activity.uuidPost = P.uuid 
    AND Activity.id = U.id 
    WHERE A.id = 145) 
+0

まあ、その答えは間違っているようです。 'T.postID = '$ uid' //現在のログインしているユーザのIDを保持します。 - > postIDユーザのIDではなく、投稿のIDです。あなたは同じ問題を抱えています:P.idは現在のユーザーとは何の関係もありません – Shadow

+0

@Shadowああそうですかu.id = 145ですか? –

+0

うん、それは正しい。いいスポット! – Shadow

答えて

0

すべての記事に、特定のユーザーを取得するために...私はMYSQLに非常に新しいですと、完全にそれを理解するように見えることはできません(ID = 145)と、すべてのそれに続くユーザーの投稿と、各投稿のユーザーの詳細とともに、orの代わりにunionを使用するようにクエリを書き直して、ロジックを単純化します。

(SELECT P.id as postid, 
     P.caption, 
     P.date, 
     U.id as userid, 
     U.fullname, 
     U.username, 
FROM USERS AS U 
INNER JOIN Posts AS P ON P.userid = U.id 
WHERE U.id = 145) 
UNION 
(SELECT P.id, 
     P.caption, 
     P.date, 
     U.id, 
     U.fullname, 
     U.username, 
FROM Activity AS A 
INNER JOIN USERS AS U ON A.IdOtherUser=U.id 
INNER JOIN Posts AS P ON P.userid = U.id 
WHERE A.id = 145) 
ORDER BY postid DESC 

仮定:第一選択は、特定のユーザーの投稿を取得し、第二には、それは以下の通りですユーザーの投稿を取得

  1. Activity.idフィールドを次のユーザーを表し、他のユーザー。そうでない場合は、フィールド名を適切なものに変更する必要があります。

  2. 発明者は、投稿を掲示したユーザを表す投稿テーブルのユーザIDフィールドを作成した。 Plsはその場所に正しいフィールド名を使用します。

+0

ファンタスティックメイト..心配しないでください。正しいフィールド名を使用しました! –

+0

ねえ、私はあなたに最後のことを1つ質問します...私の最終的な質問であなたの意見を教えてください、私はそれを私の質問に加えましたか? –

+0

正直言ってあなたが期待している答えのタイプは本当にわかりません。 – Shadow

関連する問題