从一个两个表中选择值

时间:2014-02-12 21:21:56

标签: mysql

我的数据库中有两个表,一个表包含允许说社交网络的所有用户,第二个表包含谁跟随谁。现在,当用户A搜索用户B时,我希望不仅能够返回用户B,还能告诉用户A是否跟随用户B.我试过这个但是它不起作用。

"SELECT
`destination_id` 
FROM `followers` 
WHERE `source_id` IN
(SELECT `username`
 FROM `userinfo` WHERE `username`
 LIKE '%".mysql_real_escape_string($data)."%' OR 
`email`LIKE '%".mysql_real_escape_string($data)."%')"

每个表的示例 用户信息 - >

           ID    username    email

           1     ABC        ABC@gmail.com

           2     XYZ        XYZ@live.com

追随者 - >

           source_id  destination_id

           ABC        XYZ

           HIJ        JKL

请这是否意味着我做了两个单独的查询,或者我可以将两个查询作为一个查询。像上面一样。

注意:$data是来自用户的关键值,因为他输入了他搜索的用户并且它有效。 destination_id和source_id属于跟随者表,它的工作原理类似于source_id跟随destination_id(即用户A跟随用户B)。

希望清楚。

2 个答案:

答案 0 :(得分:0)

这个怎么样?

SELECT userinfo.username, ifNULL(concat(followers.destination_id, ' IS FOLLOWED'), 'NOT FOLLOWED')
FROM userinfo 
LEFT OUTER JOIN followers
on userinfo.username = followers.destination_id
and followers.source_id = 'ABC'
WHERE (username
 LIKE '%XYZ' OR email LIKE '%XYZ%')

答案 1 :(得分:0)

我会用这样的东西:

SELECT
  u1.*,
  CASE WHEN u2.username IS NULL THEN 'Not following'
       ELSE 'Following' END is_following
FROM
  userinfo u1 LEFT JOIN followers f
  ON u1.username = f.source_id
  LEFT JOIN userinfo u2
  ON f.destination_id = u2.username
     AND (u2.username LIKE '%B%' OR u2.email LIKE '%B%')
WHERE
  u1.username='A'

请参阅小提琴here