当前位置: 首页 > 面试题库 >

友谊系统的SQL结构与查询

祝允晨
2023-03-14
问题内容

我正在编写一个友谊系统,它有两个表。

成员

  • ID
  • 用户名
  • 密码

朋友们

  • ID
  • 用户身份
  • friend_id
  • 状态

假设我想要一个可以选择成员$ userId的朋友ID的查询,如何在一个查询中做到这一点?

我找到了一个解决方案,可以进行2次查询。拳头选择朋友在哪里user_id = $userId,第二个选择朋友在哪里friend_id = $userId,然后将它们混合成一个数组。如果没有其他解决方案,我将使用它。

请对SQL结构和查询有任何想法吗?


问题答案:

使用:

SELECT f.friend_id
  FROM FRIENDS f
 WHERE f.user_id = $user_id
UNION
SELECT t.user_id
  FROM FRIENDS t
 WHERE t.friend_id = $user_id

使用UNION将删除重复项。 UNION ALL会更快,但不会删除重复项。

如果要从MEMBERS表中获取朋友的信息,请使用:

SELECT m.*
  FROM MEMBERS m
  JOIN (SELECT f.friend_id 'user_id'
          FROM FRIENDS f
         WHERE f.user_id = $user_id
        UNION
        SELECT t.user_id
          FROM FRIENDS t
         WHERE t.friend_id = $user_id) x ON x.user_id = m.id

顺便说一句:我希望您在变量上使用mysql_escape_string,否则您将冒着SQL注入攻击的风险:



 类似资料:
  • 问题内容: 我正在尝试与Laravel创建一个友谊系统(我从它开始),但是我被各种关系所困扰。事情是这样的:有一个表Users和一个表Friends,其中包含以下列: 它看起来像“多对多”,所以这是我在User类上设置的: 但是当我尝试一个: 我有这个错误: 我想获取用户好友列表,无论用户发送邀请还是收到邀请都无所谓。因此,用户可以根据user_id或friend_id,然后根据该列检索其他用户的

  • 表朋友:id、用户id、朋友id。 表用户配置文件:id、用户id、名字。。。 如何通过雄辩的ORM获得用户的朋友列表? 用户id:5 |朋友id:6 user_id: 6|friend_id5 类似问题: 与拉拉维尔的友谊系统:多对多关系 拉维尔 我无法理解是谁调用了getFriendsAttribute()方法。 以及如何做到这一点查询生成器。 谢谢

  • 本文向大家介绍C++ 友谊,包括了C++ 友谊的使用技巧和注意事项,需要的朋友参考一下 示例 该friend关键字是用来给其他类和函数访问类的private和protected成员,甚至通过他们的class`s范围之外定义。            

  • 问题内容: 在向我显示重复项之前,请注意,我已经在网站上进行搜索,发现了 一些 示例,但并非完全针对我的问题:) 在SQL中创建 友谊 表的最佳方法是什么,但是要确保每行都是唯一的,因为无论它们属于哪一列,相同的UserID和FriendID都不会被允许? 我有这个粗略的例子 并有2个外键,分别来自UserID和FriendID。 不过目前,我可以在用户之间插入 两次 Friendship ,从而

  • 冯·诺依曼体系结构 计算机处理的数据和指令一律用二进制数表示 顺序执行程序 计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。 数据的机内表示 二进制表示 机器数 由于计算机中符号和数字一样,都必须用二进制数串来表

  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断与系统调用 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 由计算机硬件异常或故障引起的中断,称为内部异常中断; 由程序中执行了引起中断