回答

收藏

友谊系统的SQL结构与查询

技术问答 技术问答 248 人阅读 | 0 人回复 | 2023-09-14

我正在写一个有两个表的友谊系统。7 A6 t  _% {5 H! E
members
8 Y+ n, i% G6 e- X5 s, h& b. Xid
8 h; P; X5 c  `username) P' }( }: `* h( s6 Z* }& b
password
friends
4 A, D7 L/ G/ f8 X4 h" iid
* c# Z' @! U7 U; P! ~  U8 ~user_id
) q% O6 }0 W3 K. u5 f5 t" Bfriend_id3 z3 {2 D, g* B" p. e+ U
status
假设我想要一个成员$ userId的朋友ID如何在查询中做到这一点?
* d5 }8 @. R# d  F& Z我找到了一个可以查询两次的解决方案。拳头选择朋友在哪里?user_id = $userId,第二个选择朋友在哪里friend_id =$userId,然后将它们混合成数组。如果没有其他解决方案,我会用它。
8 ~3 L* \3 C; S# g7 r请对SQL结构和查询有什么想法吗?
9 p1 X6 |7 {& ~* i( V* I                                                                ( f0 e3 x$ G) k* F0 N' \  @
    解决方案:                                                               
" Z: v/ d0 y4 B                                                                使用:
/ |$ P+ @+ T/ E4 w. C4 s: BSELECT f.friend_id  FROM FRIENDS f WHERE f.user_id = $user_idUNIONSELECT t.user_id  FROM FRIENDS t WHERE t.friend_id = $user_id使用UNION删除重复项。UNION ALL会更快,但重复项不会删除。
8 g7 [5 x7 ?8 [' Y如果要从MEMBERS请使用表中的朋友信息:
7 Q4 S$ }* q0 p' vSELECT 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注入攻击风险
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则