php - 在这种情况下如何查询两个表?

标签 php mysql pdo

对于投反对票的人,你能解释一下原因吗?如果这对您来说似乎微不足道,我将不胜感激您指出我的引用资料;如果这是一个重复的问题,我将不胜感激你指出我之前的问题。谢谢!

我有两个表,userfriend。目标如下:一个用户a想要获取另一个用户b的信息;返回的信息取决于他们是否是 friend 。具体来说,如果他们是 friend ,a可以看到busernameaddress;如果不是,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 。所以基本上有以下两种场景:

  1. 用户 2 (def) 想查看用户 3 (ghi) 的信息,查询只返回 ghi 的用户名,但是不是地址
  2. 用户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/

相关文章:

php - MYSQL 制定搜索查询

php - 优化MySQL数据库查询

MySQL 查询,仅在查询生命周期内存储一些计算数据

php - 如何在没有 PDO 的情况下使 Drupal 工作

php - 在 RHEL 6 上编译 `mysql_pdo` 驱动程序(无法访问互联网,没有 `yum install` )

php - Laravel 迁移不适用于 MySQL (InnoDB)

android - 在android中将SQLite数据库与远程mysql数据同步

javascript - 怎么调404页面去搜索

php - PDO 相当于 pg-result-seek

php - MySql 获取不同域的数量