私は3つのテーブルを持っています。
myMembers
------------------------------------
id | username | privacy
------------------------------------
1 | userA | 0
2 | userB | 1
3 | userC | 0
4 | userD | 1
following
--------------------------------
id | user_id | follower_id
--------------------------------
1 | 2 | 1
posts
-------------------------------------
id | userID | username | statusMsg
--------------------------------------
1 | 4 | userD | Issac Newton is genius
2 | 2 | userB | Newton Saw apple
3 | 3 | userC | Newtonian Physics
4 | 1 | userA | Calculus came from Sir Newton
検索フィールドがあります。ログインしたユーザーがテーブル「posts」で「keyword」を検索するときに、プライバシーを「1」に設定し、WHEREサーチャーがユーザーBをフォローしていないユーザーの結果を省略したいと思います。
クエリは論理的にこれを行う必要があります。
SELECT * from posts WHERE (match the keyword)
AND (
if (poster's privacy (which is set in myMembers)==1){
if (seacher is following poster){
select this post
}
}
else { select this post
}
)
LIMIT results to 5 rows
したがって、キーワード「Newton」の場合、userAが検索している場合は、「posts」の行2、3、4が返されます。userDが検索している場合、「posts」の行1、3、4のみが返されます。
プライバシーに基づき、次の編集:将来の検索のためのタグ付け:mySqlのWHERE句内のIF条件