我有一个非常类似于GitHub明星的功能。一个用户可以拥有一个存储库,另一个用户可以对该存储库加注星标。
我的starred_repos
表看起来像这样
| id | user_id | created_at | repo_id |
---------------------------------------
| ...| ... | ... | ... |
我想显示给定用户的所有已加星标存储库的列表。与GitHub的https://github.com/zemirco?tab=stars非常相似。
与以下查询配合使用
SELECT repos.*, users.*, starred_repos.created_at
FROM starred_repos
LEFT JOIN repos ON repos.id = starred_repos.repo_id
LEFT JOIN users ON users.id = repos.user_id
WHERE starred_repos.user_id = 1
它为我提供了给定user_id的加星标的存储库以及存储库的所有者。
该列表中缺少的是以下事实:另一个用户是否已给存储库加注星标。例如,如果您查看我的GitHub星号(登录时),并且我为一个存储库加注了星标,那么您也为该星标了Unstar
按钮。如果您还没有从我的清单中给任何回购加注星标,他们都会说Star
。
因此,我们可以像上面的查询一样,为用户1
设置星星。我本人具有用户ID 2
,并且查询还应返回ID为2
的用户是否已对该存储库加注星标。
作为函数,它应该看起来像GetStarredRepos(for_user_id: 1, own_user_id: 2)
。
我希望有这样的列表(仅显示最重要的内容)
| id | owner_name | repo_name | starred |
-----------------------------------------
| ...| ...... | ... | false |
| ...| ...... | ... | true |
有了这个结果,我可以建立一个类似GitHub上的列表。
非常感谢您,万圣节快乐!