2017-01-07 1 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 

То, что я хочу, чтобы напечатать соответствующие usernames из contact_ids.

user_id Так что для 1, например, я хочу, чтобы напечатать:

Tim 
Chris 
Noel 

Как я могу это сделать?

Я могу напечатать contact_ids из contacts таблицы хорошо с:

 $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>"; 
} 

Это будет печатать:

3 
5 
6 

Но как я могу напечатать соответствующий username столбец в таблице user? Я пытался в течение нескольких часов с 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>"; 

}

Спасибо за любую помощь.

+1

Я только что написал правильный SQL с INNER JOIN и отправлял вам сообщения, но я заметил, что это точно так же, как и у вас, кроме DISTINCT - это не будет никакой разницей. Странно, что это не удается. – smozgur

+1

Ahh! 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 

С «$ user_id» вместо 1 в php-коде, конечно.

EDIT: Хорошо, я не добавил DISTINCT, учитывая, что вы также возвращаете contact_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 таблице дважды назад к столу пользователя, используя различные псевдонимы для каждого соединения на contact_id и user_id колонн. что-то вроде ....

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' 
Смежные вопросы