1

これはしばらくの間私を困惑させました。

私の問題: 2 つの異なるテーブルがあります。ユーザー投稿用のテーブルとサブスクライバー用のテーブル。

サブスクライバー テーブルは次のようになります。

加入者 ID -> プロファイル ID
1 -> 2
1 -> 3
2 -> 3
2 -> 4
3 -> 2

私の投稿テーブルは次のようになります:

PostID -> AuthorID -> PostDate -> PostBody
1 -> 2 -> 12/20/12 -> Hello Word
2 -> 3 -> 12/21/12 -> Bye Bye World
3 - > 1 -> 12/22/12 -> あ、ちょっと待って
4 -> 4 -> 12/23/12 -> まだ誰かいる?

基本的には、IDのユーザーはID2とID3のユーザーに登録されます。ID#2はID#3とID#4に登録されます。ユーザーが特定のユーザーにサブスクライブしている場合、サブスクライブしているユーザーからの投稿のみを表示できます。今、私は同様の質問で見た以下を使用しています:

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

これは正常に機能しますが、ユーザーの投稿も表示されません。私はそれを変更しようとしましたが、うまくいきません:\

迷ったら「?」ユーザーのIDを表します

可能であれば、ユーザーが購読している人々からの投稿と一緒にユーザー自身の投稿を含める方法を誰かが教えてくれたら素晴らしいでしょう.

4

1 に答える 1

2

クエリを次のように変更して実行できます。

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 

ユーザー自身の投稿も選択します。これが役立つことを願っています。

更新 :テーブルGROUP BY POSTS.POSTID内のデータのみを検索するため、重複が削除されるように追加されました。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

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

于 2011-12-21T02:11:51.870 に答える