2012-01-20 8 views
0

私はユーザベースのメッセージシステムを構築しようとしています。私は友人の間で送られるメッセージを表示したい、Facebookのニュースフィードのようなもの。SQL - 2つの異なるIDを使用してカラムからデータを返します

私は、クエリを使用しています:

SELECT friend_user_2, user_id, user_name, sent_id, sent_from_id, sent_to_id 
FROM friends, users, sent_messages 
WHERE (user_id = sent_from_id AND friend_user_1 = '$user_id' AND sent_from_id = friend_user_2) 
OR (friend_user_1='$user_id' AND friend_user_2=sent_to_id AND user_id=sent_to_id) ORDER BY sent_id 

に実行して、問題のイムを、送信者と受信者のUSER_IDを別々に識別されていないということです、それは唯一の友人のUSER_IDを返します。何らかの形で名前を付けるためにはテーブル結合が必要だと思うでしょうし、(もし可能であれば)クエリによって返された配列内の別のクエリをネストして、それぞれの名前を個別に照会すると思います。

+0

1つのメッセージを多数の受信者に送信できますか? – DOK

+0

いいえ、受信者1人のみ – javy

+0

私はlooongの時間にmysqlを使用していませんが、実際にこれらの変数を引用する必要がありますか?私は彼らが整数だと仮定しています... –

答えて

2

あなたが好き、テーブル名またはエイリアスを使用して2つのユーザIDを取得することができます:friends表は、友人の順不同のペアが含まれ、各メッセージは(の+から)正確に一つ、このような組に関連している場合

SELECT users.user_id, friends.user_id AS friend_user_id ... 
0

データベースの設計を変更して、各メッセージがこのペアへの参照を取得できるようにすることができます(たとえば、friends_id)。

この追加データは、ORと組み合わせた異なる結合条件を持つSELECTがほぼ最適化できないため、クエリを高速化できます。

+0

興味深い思考、それは意味があり、どのように/どのように私が照会することができる多才さを追加する – javy

関連する問題