对于投反对票的人,你能解释一下原因吗?如果这对您来说似乎微不足道,我将不胜感激您指出我的引用资料;如果这是一个重复的问题,我将不胜感激你指出我之前的问题。谢谢!
我有两个表,user
和 friend
。目标如下:一个用户a
想要获取另一个用户b
的信息;返回的信息取决于他们是否是 friend 。具体来说,如果他们是 friend ,a
可以看到b
的username
和address
;如果不是,a
只能看到b
的用户名。
user
表如下所示:
id username address
1 abc XXXX Rd. XXXX
2 def XXXX Rd. XXXX
3 ghi XXXX Rd. XXXX
friend
表如下所示:
id id1 id2
1 1 2 // so 1 (abc) and 2 (def) are friends
2 1 3 // so 1 (abc) and 3 (ghi) are friends
2 (def
) 和 3 (ghi
) 不是 friend 。所以基本上有以下两种场景:
- 用户 2 (
def
) 想查看用户 3 (ghi
) 的信息,查询只返回ghi
的用户名,但是不是地址 - 用户1(
abc
)想查看用户3(ghi
)的信息,查询返回ghi
的用户名和地址
是否可以使用一个查询来完成?
最佳答案
您可以使用 JOIN 并检查加入用户的列是否存在(不为空)以确定友谊是否存在。
例如如果用户 def
(2) 想要有关用户 ghi
(3) 的信息:
SELECT
user.username,
user.address,
friend.id AS are_friends
FROM user
INNER JOIN friend
ON (friend.id1 = user.id AND friend.id2 = 2)
WHERE user.id = 3;
如果用户 2 和 3 之间的链接存在,这应该只从您的 PDO 处理程序返回一行。否则,内部联接将不起作用 - 如果您在此处使用左联接,它会起作用,但会为 are_friends
字段返回 null。
当然,您可以将该查询中的 2
替换为当前登录用户的 ID,并将 3
替换为您需要其信息的用户的 ID。
关于php - 在这种情况下如何查询两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529091/