SNSの個人設定で、以下のような日記の公開範囲設定があります。 ※「○月○日の日記を公開するかどうか」ではなく、そのユーザーの日記全体の設定です。 5.インターネット全体に公開 4.SNSユーザー全員に公開 3.友達の友達にまで公開 2.友達にだけ公開 1.非公開 ここで、特定のサイト訪問者が閲覧できる日記だけを、記事単位で最新10件分取得したい場合、 どのようなSQLを書くのがスマートでしょうか。 いまは、最初に上記の公開範囲テーブルから「閲覧できるユーザーID」を全取得して、 日記を select するときに where user_id in(1,2,3,5,6,8,9,10,11,13,...) などとやってて、 パフォーマンスがだいぶ悪いです。 そこで、手段を変えて、次のようにひとつのクエリで取得しようとしたら、もっと悪化しました。 where (private.diary = 5) or (private.diary = 4 and ログインしてるかどうか) or (private.diary = 3 and 友達の友達かどうかのサブクエリ) or (private.diary = 2 and 友達かどうか) or (private.diary = 1 and 自分かどうか)