最初に状況を設定しましょう。
Xフィールドを持つ「users」テーブルがあります。フィールドは「可視性」を除いて私の質問にはあまり関係ありません。可視性は小さなものであり、値は次のことを意味します(0 =すべての人に見える、1 =友達だけに見える、2 =見えない)。
友達のテーブルもあります(id, user_id, target_user_id)
。user_id
と友達target_user_id
です。これまでのところ簡単ですか?
ここが粘着性になります。PHP APIを書いていると、私のクラスメソッドは次のようになります。
public function getUsers($requester, $page, $num) {}
- これ
$requester
は、ユーザーを要求している人のユーザーIDです。 - これ
$page
はページネーションのページ番号です - これ
$num
は1ページあたりのアイテム数です
SQLで実行したいのは$num
、可視性フィールドが0または1の場合にusersテーブルからユーザーを取得することです。ただし、可視性フラグが1の場合、ユーザーIDと$requesterがfriendsテーブルのfriendsであることを確認する必要があります。そして、彼らが友達である場合にのみ、そのユーザーを返します。
結果が戻った後、PHPを使用して可視性をフィルタリングすることを考えましたが、たとえば5つのレコードを要求し、1人以上のユーザーが可視性を1に設定していて、リクエスターと友達ではない場合、ページネーション(制限)が台無しになります。これは、SQLを介して完全に実行する必要があります。
可能??