したがって、ユーザー、投稿、プライベート、スレッドの 4 つのテーブルがあります。この例では、lizzy は異なるスレッドに 2 つの非公開投稿を作成しました。
「デート」投稿は、ユーザー 2、5、6 および彼女自身がそのスレッド内の投稿の正確な数を確認するためのものです。
「Break Ups」の投稿は、ユーザー 2 と彼女自身がそのスレッドの投稿の正しい数を確認するためのものです。
スレッドを表示しているユーザーに応じて正しいカウントを表示することが、私が抱えている問題です。ここでは、リジー、彼女のスレッド、および投稿数に注目しています。
users (These aren't part of table. Just shows the counts we should display with our query depending on the user_id)
user_id | user_name //thread #: post_count-post_count_if_not_authorized = count to show
--------------------
1 | tony //thread 2: 3-1= 2 posts. thread 3: 2-1= 1 post.
2 | steph //thread 2: 3-0= 3 posts. thread 3: 2-0= 2 posts.
3 | lizzy //thread 2: 3 posts. thread 3: 2 posts.
4 | adam //thread 2: 3-1= 2 posts. thread 3: 2-1= 1 post.
5 | lara //thread 2: 3-0= 3 posts. thread 3: 2-1= 1 post.
6 | alexa //thread 2: 3-0= 3 posts. thread 3: 2-1= 1 post.
posts
post_id thread_id user_id post_name private (0 is public, 1 is private to authorized users)
-----------------------------------------------------
1 1 1 Coding 0
2 2 3 Dating 1
3 2 3 Show Me 0
4 2 3 See Me 0
5 3 3 Break Ups 1
6 3 3 True Love 0
private
private_id post_id authorized_user_id
-----------------------------------------------
1 2 2
2 2 5
3 2 6
4 5 2
threads
thread_id user_id post_count
------------------------------------
1 1 1
2 3 3 | When outputted in php, we should subtract the correct COUNT
3 3 2 | from this depending on the user viewing the thread like above.
つまり、基本的に、そのスレッド内のすべての投稿の合計スレッド数があります。しかし、mysql クエリでそれを引き出すと、すべてのユーザーは、彼女が持っているスレッドごとにすべての lizzy の post_count を見ることになりますが、代わりに、lizzy と、スレッド上の特定の投稿を表示することを彼女が許可したすべてのユーザーだけが、表示されている非公開の正しいカウントを参照する必要があります。彼ら。カウントを行 (post_count_if_not_authorized) として引き出して、post_count から減算して、各ユーザーに正しいカウントのみを表示する最も効率的な方法は何でしょうか?
以下のようなものは私が求めているものです(もちろんそのままでは機能しません):
SELECT DISTINCT t.thread_id, t.post_count, t.COUNT(*)
FROM threads as t
JOIN posts as p on p.user_id = t.user_id
LEFT JOIN private pv on pv.post_id = p.post_id
WHERE t.user_id='3'
AND (p.private = 0) OR (pv.authorized_user_id = {$logged_in_id} and p.private = 1)
アップデート:
(WHERE 句の t.user_id='3' は、この例では lizzy 用であり、$logged_in_id が上記のユーザー テーブルのカウントのように、ユーザーに応じて正しいカウントを与える必要がある場合)
ここにフィドルがあります。
tony ($logged_in_id=1) が lizzy (user_id=3) の開始スレッドを表示している場合、出力は次のようになります。
thread_id post_count_final (this should have the correct count for this user($logged_in_id) to see, all posts by lizzy - private posts by lizzy that this user is not authorized to see)
2 2
3 1
steph ($logged_in_id=2) が lizzy (user_id=3) の開始スレッドを表示している場合:
thread_id post_count_final (this should have the correct count for this user($logged_in_id) to see, all posts by lizzy - private posts by lizzy that this user is not authorized to see)
2 3
3 2
(注: users テーブルの横にある右上の部分は、これらの数値がどのように導き出されたかを示しています。)