2017-01-07 6 views
0

私はこのような「連絡先」テーブルを持っています。このようなPHPでは、対応する列を別のテーブルにどのようにして取得できますか?

contact_auto_inc  user_id  contact_id  
     1    1    3 
     2    1    5 
     3    2    1 
     4    3    5 
     5    3    2 
     6    1    6 

と「ユーザー」テーブル:私が欲しいもの

user_id  username 
    1   Simon 
    2   Bill 
    3   Tim 
    4   Brendan 
    5   Chris 
    6   Noel 

contact_idsのマッチングusernamesを印刷することです。

だからuser_id 1のために、例えば、私が印刷したい:

Tim 
Chris 
Noel 

私はこれを行うことができますどのように?これは、印刷し

 $user_id = $_SESSION['user_id']; 

//we want to show contact_ids in the contacts table that have the $user_id above. 
    $select_from_contacts_table = "SELECT * FROM contacts WHERE user_id = '$user_id'"; 

//get the result of the above 
    $result=mysqli_query($con,$select_from_contacts_table); 

    while($row = mysqli_fetch_assoc($result)) { 
    $contact_id=$row['contact_id']; 
    echo $contact_id . "<br>"; 
} 

私はと大丈夫contactsテーブルからcontact_idsを印刷することができ

3 
5 
6 

をしかし、私は、私はuserテーブル内の対応するusername列を印刷することができますか?私はINNER JOINと時間しようとしているが、、エラーや間違った結果を得るための線に沿って何か維持されています:任意の助け

$select_from_user_table = "SELECT DISTINCT contact_id, username 
FROM contacts 
INNER JOIN user 
ON contacts.contact_id=user.user_id WHERE user_id = '$user_id'"; 

//get the result of the above 
$result2=mysqli_query($con,$select_from_user_table); 

//show the usernames 
while($row = mysqli_fetch_assoc($result2)) { 
echo $row['username'] . "<br>"; 

}

感謝を。あなたは以下のようなwhileループでユーザ名を照会することができます

+1

私はちょうどINNER JOINで正しいSQLを書いてあなたに投稿しましたが、それはDISTINCT以外のあなたのものとまったく同じであることに気付きました。違いはありません。奇妙なことに失敗します。 – smozgur

+1

ああ! user_id =最後の部分。 contacts.user_idとされています。 – smozgur

答えて

1

これは動作するはずです。

SELECT contacts.contact_id, user.username 
FROM contacts 
    INNER JOIN user ON user.user_id = contacts.contact_id 
WHERE contacts.user_id = 1 

もちろん、PHPコードでは「$ user_id」が1ではなくなります。

編集:私はDISTINCTを入れませんでした。あなたの問い合わせにcontact_idを返すことを考慮しました。ただし、連絡先ID関連の結果は必要ないが別個のユーザーの場合は、DISTINCTを追加しますが、以下のようにcontact_idを削除してください。

まだ解決策は、両方のテーブルに存在するので、テーブル名でuser_idを使用することです。

SELECT DISTINCT user.username 
FROM contacts 
    INNER JOIN user ON user.user_id = contacts.contact_id 
WHERE contacts.user_id = 1 
+0

ブリリアント!あなたの助けをありがとう、DISTINCTなしで今完璧に動作します。そして今、contacts.contact_idのようにテーブル名を最初に置く必要はありません。下のすべての答えにも感謝します。 – CHarris

+0

うれしいことを聞いて嬉しいです。 – smozgur

2

は:

while($row = mysqli_fetch_assoc($result)) { 
    $contact_id=$row['contact_id']; 

    $query = "SELECT username FROM user WHERE user_id = '".$contact_id."' "; 
    $result = mysqli_query($con,$query); 
    $row = mysqli_fetch_assoc($result) 
    echo $row['username']; 

} 
1

あなたはcontact_iduser_id列に参加するごとに異なる別名を使用して二回裏UserテーブルにContact表に参加する必要があります。何かのように....

SELECT C.contact_id, U1.username 
FROM `contacts` C 
INNER JOIN `user` U ON C.user_id = U.user_id 
INNER JOIN `user` U1 ON C.contact_id = U1.user_id 
WHERE C.user_id = '$user_id' 
1

あなたの質問は間違っています。ダブルJOINのように実行する必要があります

SELECT DISTINCT contact_id, username 
FROM contacts c 
INNER JOIN user u ON c.user_id = u.user_id 
INNER JOIN user u1 ON u1.user_id = c.contact_id 
WHERE c.user_id = '$user_id' 
関連する問題