1

「user」テーブルの列名は「id」、「username」、「name_surname」、「password」です。
「friends」テーブルの列名は、「user_id」、「friends」、「request」、「bans」です。
「wall」テーブルの列名は、「id」、「post」、「access」、「date」、「owner_id」、「poster_id」です。

ユーザーが自分のアカウント ページにアクセスすると、Facebook のように「考えていること」を書いており、その投稿を誰が読むことができるかを選択できます。ただし、wall の投稿を読みたい場合は、すべての投稿を読んではいけません。彼の ID が投稿者の友達の列にある場合にのみ、彼は読み取ることができます。

たとえば、私の ID は 3、投稿者の ID は 5 で、friends フィールドは jason データとして値を保持します。
「user」テーブルでは、id=>3、username=>user1、name=>John、password=>1234
「friends」テーブルでは、user_id=>5、friends=>[1,2,3,4,7, 8], requests=>[11,12,13], bans=>[31,32,33]
"wall" テーブルで, id=>1, posts=>ここに私の考え, access=>friends_only, date= >2013-04-25 19:23:00、owner_id=>7、poster_id=5

上記の情報によると、私は id=3 として id=5 のユーザーの火事なので、id=1 のウォール投稿を読むことができます。腹痛のせいで、SQL クエリを書くことができませんでした。これは私のばかげた質問です。

"SELECT w.*, u.* FROM wall AS w"
    . " LEFT JOIN user AS u ON u.id=w.poster_id"
    . " WHERE w.access='everybody'"
    . " OR (SELECT * FROM wall WHERE w.access='friends_only'"
    . " IN (SELECT * FROM friends WHERE friends contains 3) )"
    . " ORDER BY w.id DESC LIMIT 0,5"

正しいクエリを書くのを手伝ってくれませんか? 敬具。

4

1 に答える 1