私は、ユーザーがお互いに音楽を推薦できるアプリケーションを構築しており、ユーザー自身とユーザーの両方が関わる推奨の「ストリーム」を返すクエリを構築するのに問題があります、およびユーザの任意の友人のいずれかを含むことができる。これは私のテーブル構造である:アクティビティストリーム/フィードのSQLクエリでの問題
勧告
ID Sender Recipient [other columns...]
-- ------ --------- ------------------
r1 u1 u3 ...
r2 u3 u2 ...
r3 u4 u3 ...
ユーザー
ID Email First Name Last Name [other columns...]
--- ----- ---------- --------- ------------------
u1 ... ... ... ...
u2 ... ... ... ...
u3 ... ... ... ...
u4 ... ... ... ...
関係
ID Sender Recipient Status [other columns...]
--- ------ --------- -------- ------------------
rl1 u1 u2 accepted ...
rl2 u3 u1 accepted ...
rl3 u1 u4 accepted ...
rl4 u3 u2 accepted ...
ので( 'U1' は友人である)ユーザU4」の、 u4に関連する推奨事項の「ストリーム」を検索したいこのストリームには、送信者または受信者がu4であるすべての推奨事項と、送信者または受信者がu1(友人)であるすべての推奨事項が含まれます。
これは私がこれまでにクエリの持っているものです。私の知る限り(私はSQLの専門家だ)見ることができるように、動作しているようです
SELECT * FROM recommendations
WHERE recommendations.sender IN
(SELECT sender FROM relationships WHERE recipient='u4' AND status='accepted'
UNION
SELECT recipient FROM relationships WHERE sender='u4' AND status='accepted')
OR recommendations.recipient IN
(SELECT sender FROM relationships WHERE recipient='u4' AND status='accepted'
UNION
SELECT recipient FROM relationships WHERE sender='u4' AND status='accepted')
UNION
SELECT * FROM recommendations
WHERE recommendations.sender='u4' OR recommendations.recipient='u4'
GROUP BY recommendations.id
ORDER BY datecreated DESC
。これは、特定のユーザーに関連する「Recommendations」テーブルのすべてのレコードを返します。しかし、私は現在、Usersテーブルからもデータを取得することに問題があります。 Recommendationsテーブルには送信者と受信者のID(外部キー)がありますが、それぞれの姓と名も取得したいと思います。私は何らかの種類のJOINが必要だと思うが、進め方が分からず、その助けを求めていた。 (また、現在のクエリで改善の余地が見られる場合は、私はすべて耳にします)
ありがとう!
独自のサービスではなくサードパーティのサービスを使用することができる場合は、http://www.collabinate.comをこのような課題に簡単に対応できます。 – Mafuba
誰もがこれを今に渡って来て - これまでこれまでにこれを行う。 – blabus
ハハ...あなたは理由を説明するのに気をつけますか? – Mafuba