小编典典

友谊系统的SQL结构与查询

sql

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

members

  • id
  • username
  • password

friends

  • id
  • user_id
  • friend_id
  • status

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

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

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


阅读 216

收藏
2021-04-17

共1个答案

小编典典

使用:

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注入攻击的风险

2021-04-17