如何根据另一个表上的查询结果在一个表上运行查询?

时间:2012-02-05 05:06:08

标签: php mysql sql join

我不确定正常联接会对我有什么样的帮助:

我有两个表作为我正在构建的应用的一部分:一个只在第一列中列出username,在第二列中列出friend's username。此表严格用于跟踪用户和与他们成为朋友的用户。

第二个表格有4列,usernamelast namefirst namepassword。此表严格用于跟踪注册用户的登录信息和个人信息。

我想在第一个表上运行查询,以查找登录用户的所有朋友,其中包含通过javascript传递给URL的搜索词,我已经完成了:

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

这将从“friends”表中返回包含搜索词$ term的登录用户的朋友的用户名列表。

接下来,我想运行一个查询,该查询返回与第一个查询匹配的所有用户的first namelast nameusername(已登录用户的朋友)并且名字或姓氏包含相同的搜索词,$ term,通过javascript传递给网址。此查询必须位于“用户”表中,因为它只包含名字和姓氏。

我只是不确定如何加入表并以这样的方式运行查询,以便仅为用户的朋友获取此信息。

5 个答案:

答案 0 :(得分:0)

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%';

答案 1 :(得分:0)

在这种情况下,您可以使用IN。

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

我相信这可能会导致你想要的东西。如果不是,您将需要使用JOIN。

答案 2 :(得分:0)

您可以使用普通联接或使用子查询来执行此操作。

子查询:

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

答案 3 :(得分:0)

请修改符合您需求的字段名称:

SELECT username, lastname, firstname
FROM `SecondTable`
WHERE username in
    (SELECT friend as username 
    FROM friends 
    WHERE user='$user' AND 
          friend LIKE '%" . $term . "%'") 

答案 4 :(得分:0)

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

你应该能够从中推断出你需要的任何东西。