如何为存储库和星标建模?

时间:2018-11-01 11:16:12

标签: sql postgresql

我有一个非常类似于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上的列表。

非常感谢您,万圣节快乐!

0 个答案:

没有答案