0

私は2つのテーブルを最初に呼び出し、friendship2番目userを次の詳細で呼び出します

friendshipテーブルフィールド:

uid1, uid2

userテーブルフィールド:

uid, username, primary_email, f_name, m_name, l_name, avatar, avatar_path

userアイデアは、テーブル上にあるときuid1にテーブルからすべての友達の詳細を取得することfriendshipです。たとえば、= 1は、次のクエリがこのアイデアのベストプラクティスですか?

SELECT 
   u.uid,
   u.username,
   u.primary_email,
   u.f_name,
   u.m_name,
   u.l_name,
   u.avatar,
   u.avatar_path 
FROM friendship AS f 
LEFT JOIN user AS u ON f.uid2=u.uid 
WHERE f.uid1=1

1つのクエリにjoinを使用するか、2つのクエリを使用して友情テーブルからIDを抽出し、もう1つをユーザーテーブルから各IDの詳細を抽出するのがベストプラクティスですか。例:-

SELECT uid2 from friendship WHERE uid1 =1

このクエリはID2、4、6、5、9の配列を取得し、次のクエリで使用します

SELECT * from user WHERE uid IN (2,4,6,5,9)

ベストプラクティスは何ですか?

4

3 に答える 3

1

このクエリは、主な人物の名前とその友人の名前を提供します。

create table users
(
    uid int,
    username varchar(10),
    fname varchar(10)
)

insert into users values(1, 'test', 'Jim')
insert into users values(2, 'blah', 'Tim')
insert into users values(3, 'xxx', 'Henry')
insert into users values(4, 'nada', 'Bob')

create table friendship
(
    uid1 int,
    uid2 int
)

insert into friendship values (1, 2)
insert into friendship values (1, 3)
insert into friendship values (2, 3)
insert into friendship values (3, 4)

select u2.uid personid
    , u2.fname personname
    , f.uid2 friendid
    , u1.username friendusername
    , u1.fname friendname
from users u1
inner join friendship f
    on u1.uid = f.uid2
left join users u2
    on f.uid1 = u2.uid

結果:

ここに画像の説明を入力

于 2012-08-02T16:20:18.120 に答える
0

あなたの「友情」のステータスは、指示されていますか、それとも指示されていませんか? つまり、user1 が user2 の友人である場合、user2 が user1 の友人であることを意味しますか? その場合はONWHERE条件を変更する必要があります。

ON f.uid2 = u.uid OR f.uid1 = u.uid
WHERE u.uid = 1

それとは別に、その選択クエリに問題はありません。

于 2012-08-02T16:02:54.923 に答える
0

すべてのデータを使用することが確実な場合は、1 つのクエリで結果を取得するのがベスト プラクティスです。これにより、データベースへのアクセスは、友人ごとに 1 回 (および最初のクエリ) ではなく、1 回だけで済みます。

ただし、フレンドシップから LEFT OUTER JOIN を使用しているため、フレンドシップ テーブルに uid に対応するユーザー レコードがない場合、NULL 行が返される可能性があることに注意してください。

代わりに、次のように INNER JOIN を試してください。

SELECT 
   u.uid,
   u.username,
   u.primary_email,
   u.f_name,
   u.m_name,
   u.l_name,
   u.avatar,
   u.avatar_path 
FROM friendship AS f
JOIN `user` AS u
  ON u.uid = f.uid2
WHERE f.uid1 = 1
于 2012-08-02T16:59:01.900 に答える