Mysql 从一个表和两个表中选择值
我的数据库中有两个表,一个表包含社交网络的所有用户,第二个表包含跟踪谁的用户。现在,当用户A搜索用户B时,我希望不仅能够返回用户B,还能够告诉用户A是否在跟踪用户B。我尝试了这个方法,但它不起作用Mysql 从一个表和两个表中选择值,mysql,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_strin
"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)."%')"
每个表的示例
用户信息-->
追随者-->
请问这是否意味着我要做两个独立的查询,或者我可以将两个查询作为一个查询。如上所述
注意:$data
是用户输入他搜索的用户时的关键值,它可以工作。目标_id和源_id属于followers表,其工作原理类似于此源_id跟随目标_id(即用户A跟随用户B)
希望清楚。这个怎么样
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%')
我会用这样的方式:
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'
请看fiddle。是否
userinfo.username
与关注者的数据类型相同。source\u id
?能否显示每个表的4或5行以使其更具可读性?是的,它们具有相同的数据类型@PeterGluck,我已使其更具可读性抱歉,我没有收到您的代码。这些代码如何表明用户A是否已经在跟踪用户BI认为我误解了原始问题,用于检查ABC是否在跟踪XYZIt的修改查询返回值,但“被跟踪”或“未被跟踪”未附加到返回的值。请对此提供帮助。请解释u1、u2和f是什么。这些代码对我来说太高级了。谢谢,不用管我懂密码了。工作起来很有魅力。非常感谢,但我有个问题。如果XYZ是新用户且不在followers表中,它将返回null。即使XYZ不在followers表中,但在userinfo表中,我如何返回XYZ。i、 e.如果XYZ后面跟ABC,则返回值XYZ following,即使XYZ不在数据库中,仍返回XYZ not following。
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%')
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'