我的数据库中有两个表,一个表包含允许说社交网络的所有用户,第二个表包含谁跟随谁。现在,当用户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)。
希望清楚。
答案 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。