最简单的解决方案是使用一个 MANY-TO-MANY 连接表来链接这两个表。您可以使用 2 个 MANY-TO-MANY 表或单个表来执行此操作。
例如2个表:
user_follows_company
ID CompanyID UserID
---- ------ ---------
1 1 5
1 1 6
1 1 8
1 2 5
您可以使用以下 SQL 获取用户关注的公司:
SELECT * FROM company c JOIN user_follows_company ufc on ufc.companyID = c.ID WHERE user = $USER_ID
company_follows_user
ID CompanyID UserID
---- --------- ---------
1 3 5
1 3 6
1 5 3
1 5 4
您可以使用以下 SQL 获取公司关注的用户:
SELECT * FROM user u JOIN company_follow_user cfu on cfu.userID = u.ID WHERE user = $USER_ID
或者您可以使用单个表格执行此操作,并使用一列来指定要遵循的方向:
follows_table
ID CompanyID UserID Initiator
---- --------- --------- ---------
1 3 5 Company
1 3 6 Company
1 5 3 Company
1 5 4 Company
1 5 1 User
1 6 1 User
1 8 1 User
1 5 2 User
请注意,将“启动器”存储为字符串不是一个好主意 - 它可能应该是 int 或 ENUM
要查询此表,请执行以下查询:
用户关注的公司:
SELECT * FROM company c JOIN follows_table ft on ft.userID = c.ID WHERE user = $USER_ID AND ft.initiator = 'user'
公司关注的用户:
SELECT * FROM user u JOIN follows_table ft on ft.userID = u.ID WHERE companyID = $$COMPANY_ID AND ft.initiator = 'company'