我正在编写一个友谊系统,它有两个表。
members
friends
假设我想要一个可以选择成员$ userId的朋友ID的查询,如何在一个查询中做到这一点?
我找到了一个解决方案,可以进行2次查询。拳头选择朋友在哪里user_id = $userId,第二个选择朋友在哪里friend_id = $userId,然后将它们混合成一个数组。如果没有其他解决方案,我将使用它。
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会更快,但不会删除重复项。
UNION
UNION ALL
如果要从MEMBERS表中获取朋友的信息,请使用:
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注入攻击的风险