2011-12-21 38 views
1

これはしばらく私を困らせました。「購読者」の投稿とユーザーの投稿を表示

私の問題: 私は2つの異なるテーブルを持っています。ユーザー投稿のテーブルとサブスクライバのテーブル。

加入者テーブルは次のようになります。

- サブスクライバ - >プロファイルID
1 - > 2
1 - > 3
2 - > 3
2 - > 4
3 - > 2

私の記事のテーブルには、次のようになります。 - > AuthorID - > POSTDATE -

PostID> PostBody
1 - > 2 - > 12/20/12 - > Hello Word
2 - > 3 - > 12/21/12 - >バイバイワールド
3 - > 1 - > 12/22/12 - >ああ待つ
4 - > 4 - > 12/23/12 - >誰もまだここにいますか?

基本的には、IDを持つユーザーがID 2と3のユーザーにサブスクライブしていることです。ID#2はID#3と#4にサブスクライブされています。ユーザーが特定のユーザーに登録されている場合、そのユーザーが購読している投稿のみが表示されます。さて、私が使用している私は、同様の質問で見た次

SELECT POSTS.* 
FROM POSTS 
JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = ? 
ORDER BY POSTS.POSTID DESC LIMIT 10 

これは正常に動作しますが、それは同様に、ユーザーのポストを示していません。私はそれを修正しようとしましたが、それは動作していません:\

あなたが疑問に思っている場合は、 "?できれば、誰かがあなたのを修正し、それを行うことができます

+0

最も簡単な方法は、ユーザーが自分自身を購読できるようにすることです(自分の購読した投稿を表示するモデルでは意味があります)。 – djlumley

+0

これを行うことはおそらく私の最後の手段になるでしょう。 – InVert

+0

私には、サブクエリまたは複数のクエリを使用する方法があります。ユーザーが購読しているprofileIDのリストを検索し、結果のリストにあるprofileID、または現在のprofileIDである投稿のリストをプルします。 – djlumley

答えて

2

に人のユーザが加入からの投稿と一緒にユーザー自身の投稿を含める方法を教えてもらえあれば、それは素晴らしいことだユーザーのID

を表しクエリ:

SELECT POSTS.* 
FROM POSTS 
LEFT JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = ? OR POSTS.AUTHORID = ? 
GROUP BY POSTS.POSTID ORDER BY POSTS.POSTID DESC LIMIT 10 

これは、ユーザー自身の投稿も選択します。これが助けてくれることを願って。

更新日:が追加されました。したがって、POSTSテーブルのデータだけを検索すると重複が削除されます。

たとえば、値を渡すようなクエリを実行すると、ユーザーIDた1のクエリは次のようになります。

SELECT POSTS.* 
FROM POSTS 
LEFT JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = 1 OR POSTS.AUTHORID = 1 GROUP BY POSTS.POSTID 
ORDER BY POSTS.POSTID DESC LIMIT 10 

結果は次のとおりです。

PostID AuthorID PostDate PostBody 

3  1 2012-12-21 Oh Wait 
2  3 2012-12-21 Bye Bye World 
1  2 2012-12-20 Hello Word 

これは、あなたが適切に選択クエリにするとき、パス値を得るものです。 SUBSCRIBERIDAUTHORIDに渡された値はと同じでなければなりません。 LEFT JOINは問題を解決します。

+0

奇妙なことに、これはうまくいきません:\ – InVert

+0

私はSQLのエキスパートではありませんが、あなたがAuthorIDをProfileIDに参加させていると思われます。テストしないと、少なくとも1人は購読しなければならないAuthorID/ProfileIDが結合されたテーブルにリストされるようにユーザーに通知します。 – djlumley

+0

@ user984935 - クエリが正常に動作しており、質問に投稿したデータでクエリをテストしました。あなたは、答えの後半の私の更新されたクエリと同じIDを 'SUBSCRIBERID'と' AUTHORID'に渡す必要があります。 –

関連する問題