2012-01-27 21 views
-1

指定したユーザーIDの「連絡先」のリストを取得しようとしています。 私のユーザーIDが1だと言うと、私の連絡先のIDのリストをchat-c​​ontactlistから取得し、各IDのすべての情報を取得する必要があります。複合体? MySQL Join SELECTクエリ

すべてのユーザーのID、名前と連絡先情報

表のUSR:UID、RNAME、PHONENUMBER

オンラインステータスや他のもの

表チャット-USR:UID、ニックネーム、online_status

ユーザーIDと、このユーザーの各連絡先のユーザーID:

表チャットcontactlist:UID、CID(CID =だから私は名前、ニックネーム、すべての 'CID' のonline_statusを必要とする彼 "UID" ユーザリスト

int型だ人のID指定された 'uid'のために...私は左のジョイントについてのチュートリアルを読んでいるのを知っていませんが、それは複数のテーブルをマージする複雑な継ぎ目、誰でも試したいですか?どんな勧告?

は、あなたの名前はSQLの予約語であるため、RNAMEで名前を変更する

EDIT

ありがとうございます。

+0

あなたは左使用するいくつかのテーブルにはデータがない場合は参加します、このTEケースはありますか? chat-usrは常にユーザーのデータを持っているかどうか? –

+0

ちょうど結合を試みてください。あなたのsqlにヘルプを投稿してください。 – Randy

+0

chat-usrにはオンライン状態とニックネームのみが含まれています。usrにはユーザーの情報が含まれています。オンライン状態が頻繁に更新されるため、できるだけ速くしたい、usrテーブルにはすべてのユーザーのすべての情報が含まれています。 。 –

答えて

2
SELECT ccl.uid, 
     Name   = u.Name, 
     Nickname  = cu.nickname, 
     OnlineStatus = cu.onlinestatus 
FROM chat-contactlist ccl 
     JOIN chat-usr cu ON ccl.cid = cu.uid 
     JOIN usr u  ON u.uid = cu.uid 
Where ccl.uid = @uid /* your filter here */ 
+0

Uhoh、 '-contactlist ccl JOIN chat-usr cu ON Ccl.cid = cu.uid JOIN usr' at line 5 'の近くにエラーが発生する –

+1

' chat-usr 'のようにテーブル名を '' " 、 'chat-c​​ontactlist' – Akhil

+0

私はJOIN 'usr'を入れました[...]今のエラーは[Err] 1052 - フィールドリストの列 'uid'があいまいです...?非常に良いエラーの説明、笑! –

2

これはリンカテーブルchat-contactlistで定義された多対多の関係を持っている3-テーブル結合である:

SELECT u.name username, c.nickname chat_username, c.online_status 
FROM chat-contactlist cc 
    JOIN usr u ON (u.uid = cc.uid) 
    JOIN chat-usr c ON (c.uid = cc.cid); 

これは、明示的な結合です。特定のユーザーを選択する場合は、後でWHERE句に追加します。

SELECT u.name username, c.nickname chat_username, c.online_status 
FROM usr u, chat-usr c, chat-contactlist cc 
WHERE cc.uid = u.uid 
AND cc.cid = c.uid; 

これは、テーブルがWHERE文の中で平等で関連している場合は、参加暗黙的です。それは使用することはお勧めしませんが、私はそれらを読むのが時々簡単です。

さらに詳しい情報:

+0

リンクと答えをありがとうが、 FROMの「近く」でエラーが発生しました。名前をrnameで置き換えました。原因はSQLの予約語です –

+0

バックワード( ')を使用して予約語、つまり\ NAME \をエスケープすることができます。 – JYelton