2012-05-08 15 views
1

私は連絡先ページをしたいです。ここに私のテーブルの構造は次のとおりです。問題は、それが右のように動作しないことです連絡先ページを正しく作成するにはどうすればよいですか?

$sid = ID of user who is viewing; 

$sql = "SELECT STRAIGHT_JOIN DISTINCT contacts.contact_id, 
accounts.full_name FROM contacts INNER JOIN accounts 
on contacts.contact_id = accounts.user_id WHERE 
contacts.my_id = '$sid' OR contacts.contact_id = '$sid'"; 

Accounts Table: 

1) id 
2) User_id 
3) Full_name 
4) Username 
5) Email 
6) Password 

Contacts Table: 

1) My_id (This is the user who added friend_id) 
2) Contact_id (this is the contact who was added by my_id) 
3) Status 

私のクエリは次のようになります。私はクエリ(私は私の名前が連絡先の名前の代わりに連絡先に表示されるログインを意味する)で私の名前を見ることになります。

これを修正するにはどうすればよいですか?ありがとう。

答えて

1

このクエリは十分べき:

SELECT DISTINCT contacts.contact_id, accounts.full_name 
FROM contacts, accounts 
WHERE (contacts.my_id = '$sid' AND contacts.contact_id = accounts.user_id) 
OR (contacts.contact_id = '$sid' AND contacts.my_id = accounts.user_id) 
+0

何ですか?私はそれがMySQLであることを保証します... –

+0

はい、私は2つの異なるテーブルからCSVリストに入れるだけで成功したことはありません。 ( 'FROM contacts、accounts') –

+0

あなたは間違っているか、適切な記述を使用していません。この構文は、MySQLマニュアル(http://dev.mysql.com/doc/refman/5.0/en/join.html)で見つけることができます。これは、MySQLで多数のデプロイ済みプロジェクトで使用しています。 –

2

ここではSTRAIGHT_JOINというキーワードは必要ありません。連絡先情報を取得するには、contactsテーブルに2番目のJOINを使用して、アカウントに戻します。

SELECT 
    DISTINCT c.contact_id, 
    cn.full_name 
FROM 
    accounts a 
    /* first join connects the adding user's id to records in contacts */ 
    INNER JOIN contacts c ON a.user_id = c.My_id 
    /* second join connects contact list user ids back to names in accounts */ 
    INNER JOIN accounts cn ON cn.user_id = c.Contact_id 
WHERE a.User_id = '$sid' 
+0

'contacts.full_name'が存在するように思われない(少なくとも表にOPが設けられていない) –

+0

ザ参加するために必要であると思いません'accounts.Full_name'を得る。しかしそれ以外には、確かな答え! +1 –

+0

@SetSailMedia Fixed - 2回目の参加が必要 –

関連する問題