2012-04-06 18 views
1

は、私は次のような構造を持つ友人をという名前のテーブルを持っている:MySQLのクエリフレンドテーブルから友達リストを取得するには

id, from_id, to_id, confirmed, .... 

このテーブルには、すべてのユーザーのすべての友達のリストが含まれています。 from_idとto_idには、ユーザーのIDが含まれます。ここで、from_idは、実際にフレンドリクエストを送信したユーザーです。

ここで、特定のユーザーのすべての友人のリストを選択する必要があります。

されていますが、次のクエリまたは組合とクエリを使用して、それを行う方が良いです:

"select (from_id + to_id)- $user_id as friend_id, ... from friends where from_id=$user_id or to_id=$user_id" 

答えて

1

私はあなたの数学的なファンのソリューションが大好きですが、オーバーフローの問題は考慮されていません。たとえば、2つの非常に大きな数値を追加するとどうなりますか?

それ以外は、あなたの解決策は数​​値のuser_idに依存しています。共用体の使用にはもう少し時間がかかるかもしれませんが(確かめるためにテストしてください)、どんなデータ型でも動作します。

1

私はunion(あなたがfrom_idto_idのインデックスを持っていることを確認してください)を使用します:

select from_id from friends where to_id = $user_id 
union 
select to_id from friends where from_id = $user_id 

私の意見では、これはもっと明らかです。

+0

from_idとto_idにインデックスを設定する方法を教えてください。 –

+0

それぞれにインデックスを作成します。 MySQLで 'create index'文を見てください。 –

1

idsにキーがあると仮定すると、組合は確かに良くなり、次に算術演算を実行します。

関連する問題