Как выполнить запрос к одной таблице на основе результатов запроса к другой таблице? - PullRequest
1 голос
/ 05 февраля 2012

Я не уверен, что нормальное соединение поможет мне в моей ситуации:

У меня есть две таблицы как часть приложения, которое я создаю: одна просто перечисляет username в первом столбце и friend's username во втором столбце . Эта таблица предназначена исключительно для отслеживания пользователей и пользователей, с которыми они дружат.

Вторая таблица имеет 4 столбца: username, last name, first name и password. Эта таблица предназначена исключительно для отслеживания регистрации и персональных данных зарегистрированных пользователей.

Я хочу выполнить запрос к первой таблице, чтобы найти всех друзей вошедшего в систему пользователя, которые содержат поисковый запрос, переданный в URL с помощью javascript, что я и сделал:

SELECT friend FROM friends WHERE user='$user' AND friend 
LIKE '%" . $term . "%'" //$user == $_SESSION['user']

Возвращает список имен друзей вошедшего в систему пользователя из таблицы "friends", в которой содержится поисковый запрос $ term.

Далее я хочу запустить запрос, который возвращает first name, last name и username всех пользователей, которые соответствуют первому запросу (друзья вошедшего в систему пользователя) и чье имя или фамилия содержат тот же поисковый термин, $ term, переданный в URL с помощью javascript. Этот запрос должен быть в таблице «user», так как только он содержит имена и фамилии.

Я просто не уверен, как объединить таблицы и выполнить запрос таким образом, чтобы получить эту информацию только для друзей пользователя.

Ответы [ 5 ]

0 голосов
/ 05 февраля 2012
select u.username LoggedInUsersUserName, u2.username FriendsUserName 
from users u join
     friends f on f.username = u.username join
     users u2 on u2.username = f.username

Вы должны быть в состоянии экстраполировать все, что вам нужно из этого.

0 голосов
/ 05 февраля 2012

пожалуйста, измените названия полей, которые соответствуют вашим потребностям:

SELECT username, lastname, firstname
FROM `SecondTable`
WHERE username in
    (SELECT friend as username 
    FROM friends 
    WHERE user='$user' AND 
          friend LIKE '%" . $term . "%'") 
0 голосов
/ 05 февраля 2012

Вы можете использовать IN в этой ситуации.

SELECT firstname, lastname, username from tablename WHERE username IN( 
   select you have posted
);

Я считаю, что это может привести к тому, что вы хотите.Если нет, вам нужно использовать JOIN.

0 голосов
/ 05 февраля 2012

Вы можете сделать это с помощью обычного соединения или с помощью подзапроса.

подзапросы:

SELECT first_name, last_name, username FROM users
WHERE username IN (
    SELECT friend FROM friends
    WHERE user='$user'
    AND friend  LIKE "'%" . $term . "%'")

Неявное соединение:

SELECT first_name, last_name, username FROM users, friends
WHERE friend=username
AND user='$user'
AND friend LIKE "'%" . $term . "%'"

Явное соединение:

SELECT first_name, last_name, users.username FROM friends
WHERE friend LIKE "'%" . $term . "%'" AND user='$user'
LEFT JOIN users ON user=username
0 голосов
/ 05 февраля 2012
SELECT users.firstname, users.lastname, users.username 
FROM friends JOIN users ON friends.friend = users.username
WHERE friends.user = '$user'
AND friends.friend LIKE '%$term%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...