好友列表的SQL加入帮助
我有三个数据库表:好友列表的SQL加入帮助,sql,mysql,Sql,Mysql,我有三个数据库表:users、user\u profiles和friends: 用户 身份证 用户名 密码 用户配置文件 身份证 用户id 全名 朋友 身份证 用户识别码 用户b_id 什么样的查询可以查找任何用户的好友列表,并将表users和user\u profiles连接起来,以获取该好友的个人资料和用户信息?养成坏习惯(在FROM子句中不使用JOIN符号): 关键是使用表别名(所有那些“AS”子句)并在必要时多次引用同一个表 有人可以用JOIN来写这篇文章。使用: SELEC
users
、user\u profiles
和friends
:
用户
- 身份证
- 用户名
- 密码
- 身份证
- 用户id
- 全名
- 身份证
- 用户识别码
- 用户b_id
什么样的查询可以查找任何用户的好友列表,并将表
users
和user\u profiles
连接起来,以获取该好友的个人资料和用户信息?养成坏习惯(在FROM子句中不使用JOIN符号):
关键是使用表别名(所有那些“AS”子句)并在必要时多次引用同一个表
有人可以用JOIN来写这篇文章。使用:
SELECT f.username,
up.*
FROM USERS f
JOIN USER_PROFILES up ON up.user_id = f.id
JOIN FRIENDS fr ON fr.userb_id = f.id
JOIN USERS u ON u.id = fr.usera_id
WHERE u.username = ?
…假设userb\u id
是朋友id。对其进行一些修改,这会起作用吗
SELECT * FROM users u
JOIN friends f ON (f.userb_id = u.id OR f.usera_id = u.id)
JOIN user_profiles p ON u.id = p.user_id
WHERE u.id = ?
这可能不是最好的方法,但这似乎是合乎逻辑的方法:
select a.id , a.friend_id ,
Users.username
from
( SELECT id , IF(usera_id = 1, userb_id , usera_id) friend_id
FROM friends
where usera_id = 1 OR userb_id = 1 ) a
left join Users on a.friend_id = Users.id
这使用了一个mySQL函数,因此在Oracle/MSSQL中可能不起作用您不需要friends表中的“id”列-您只需要对“usera_id”和“userb_id”的组合设置一个唯一的约束。将
usera_id
和userb_id
设为主键(复合键)很理想。还不清楚用户配置文件中的“id”列将用于什么用途。如果允许一个人(由用户表中的id号标识)拥有多个用户配置文件条目,并且如果有办法确定在任何给定时间使用这些用户配置文件条目中的哪一个,那么也许user_profiles.id列会有一些相关性。usera_id用户的朋友列表,你必须从两个方向中选择一个。小马:我如何决定方向。因为如果userb首先添加用户a,那么userb的id将转到usera_id字段,usera在userb_id字段中。我该如何找到方向呢?或者我应该在friends表中创建两个条目吗?这可以正常工作,感谢我需要为friend List创建两个条目。现在似乎可以工作了。我可以只选择联接表用户配置文件的特定字段吗
select a.id , a.friend_id ,
Users.username
from
( SELECT id , IF(usera_id = 1, userb_id , usera_id) friend_id
FROM friends
where usera_id = 1 OR userb_id = 1 ) a
left join Users on a.friend_id = Users.id