【发布时间】:2019-01-03 11:27:45
【问题描述】:
我有两张桌子,第一张是users_table,第二张是friends_table。
users_table 包含用户的信息,包括banned 列,friends_table 是用户之间的友谊。
两个表都有user_id 列,所以我想要的是根据两个表中的条件检索特定用户的朋友数。条件为user_id 和banned。我希望朋友的数量不包括被禁止的用户,但即使用户朋友被禁止,我仍然可以获得朋友总数。
请帮助我,这是我的查询,它们同时运行以检索朋友:
$query1 = "
SELECT *
FROM users_table u
INNER JOIN friends_table f ON u.user_id = f.user_id
WHERE f.user_id = $user_id AND u.banned = 0
";
$query2 = "
SELECT *
FROM users_table u
INNER JOIN friends_table f ON u.user_id = f.friend_id
WHERE f.friend_id = $user_id AND u.banned = 0
";
编辑 “users_table”结构:
user_id
first_name
last_name
username
email
password
temporarily_banned
banned
“friends_table”结构:
friendship_id
user_id
friend_id
friendship_timestamp
表格记录示例
users_table 示例:
user_id: 20
first_name: Firas
last_name: Helou
username: firashelou
email: mac_987@hotmail.com
password: *******
temporarily_banned: 0
banned: 0
user_id: 30
first_name: Elie
last_name: Helou
username: eliehelou
email: elie@hotmail.com
password: *******
temporarily_banned: 0
banned: 1
user_id: 22
first_name: Jessy
last_name: Helou
username: jessyhelou
email: jessy@hotmail.com
password: *******
temporarily_banned: 0
banned: 1
user_id: 32
first_name: Jad
last_name: Helou
username: jadhelou
email: jad@hotmail.com
password: *******
temporarily_banned: 0
banned: 0
friends_table 示例:
friendship_id | user_id | friend_id | friendship_timestamp
10 20 30 1534342490
9 20 22 1533484062
16 32 20 1541619611
【问题讨论】:
-
Query1 在我看来没问题....如果你给我们表结构,我们会告诉你哪里出了问题。
-
@XraySensei 我添加了表格结构
-
你的friends_table是否以双向的方式记录每一个友谊?即 user1 和 user2 有朋友关系,所以有两条记录:一条记录 user1 是 user_id,user2 是friend_id,另一条记录 user2 是 user_id,user1 是friend_id
-
不,如果用户 1 将用户 2 添加为好友,那么在friends_table user_id=user1 和friend_id=user2 中,获取好友的查询会检查2 次span>
-
那么我认为@GMB 答案中的第二个查询是您的最佳选择,如果它适合您的数据。
标签: mysql sql database join left-join