2

私の PHP/MySQL サイトの 1 つで、すべてのユーザーがそのサイトの他のすべてのユーザーをブロックできます。これらのブロックはBlockedテーブルに格納され、各行は誰がブロックしたか、誰がブロックのターゲットかを表しています。ユーザーの「ブロック リスト」全体をすばやく取得できるように、列にインデックスが付けられます。

ユーザーごとに、ブロック リストに表示されるユーザーを検索結果から除外する必要があります。

それを行うには、次のことをお勧めします。

1) ユーザーがログイン時に一度Blockedテーブルをクエリして に保存することにより、ユーザーがログインするたびに「ブロック リスト」を生成します(また、「ブロック リスト」に変更を加えるたびに再クエリを実行し、 に再保存します) 。 、そしてそのようにクエリします:$_SESSION$_SESSION

NOT IN ($commaSeparatedListFromSession)

また

2) 次のように、各ユーザーの検索クエリに対してサブクエリを使用して、ブロックされたユーザーをクエリで直接「リアルタイム」に除外します。

NOT IN (SELECT userid FROM Blocked WHERE Blocked.from = $currentUserID)?

4

3 に答える 3

0

を適切なキャッシュ システム$_SESSIONの代わりに使用しないでください。ジャンクが山積みになるほど、リクエストごとにロードする必要があります。$_SESSION

データベースを注意深く調整しないと、サブセレクトを除外に使用すると、非常に遅くなる可能性があります。インデックスがすべての条件をカバーしていることを確認してくださいWHERE

于 2013-04-25T16:47:37.220 に答える