0

次のスキーマを持つ単純なソーシャルネットワークを構築しています(テーブルにすべてのフィールドを含めたわけではなく、関連するものだけを含めました):

tbl_users:
id
username

tbl_friends:
user_id FK tbl_users.id
friend_id FK tbl_users.id

tbl_questions:
id
user_id
title
date_created

tbl_answers:
id
question_id
body

私が欲しいのは、ユーザーの友達に属するすべての質問を、各質問の回答が 3 つに制限されている状態で取得することです。結果には、効率化するための制限があります。たとえば、友人が最後に追加した 5 つの質問を考えてみましょう。誰かがこれを手伝ってくれるなら、スケーラブルなソリューションが欲しいです。私は2つのクエリでこれを行うことができました.1番目のクエリはすべての友達を見つけます SELECT id FROM tbl_friends WHERE user_id=:id OR friend_id=:id

その後、WHERE IN 句の結果を使用して、質問のみを取得しました。答えを得ることができませんでした。それぞれの答えに対して SELECT を作成しました。私のソリューションは非効率的でスケーラブルではありません。私の問題に対するより良い解決策を見つけたいと思っています。

私もこれを尋ねなければなりません...この状況ではnoSQLの方が良いでしょうか?

4

1 に答える 1

0

次のようなものを試すことができます:

SELECT <there JOIN between user, friends and questions>
  LEFT JOIN 
    (SELECT question_id, body 
      FROM tbl_answers 
      WHERE question_id = tbl_questions.id 
      LIMIT 3
    ) AS Answers3
    ON Answers3.question_id = tbl_questions.id
于 2013-03-20T16:51:13.503 に答える