我有 4 个为我自动生成的表:
- 用户
- 挑战
- 锻炼
- 挑战_运动
一位用户可能有许多挑战,而一个挑战将有许多练习。
我注意到的是,挑战表引用了它的父用户(称为 user_id),但练习表中没有对挑战的引用;他们的关系存储在 Challenge_Exercise 作为 Challenge_id 和 exercise_id。
我的问题是,我将如何取出每个与特定用户相关联的练习?例如 id = 1 的用户?
SELECT *
FROM excerise,
challenge_excerise,
challenge
WHERE challenge.user_id = 1
AND challenge_excerise.challenge_id = challenge.id
AND challenge_excerise.exercise_id = excercise.id
我在这里做的是一个join
,你也可以明确地用它来做inner joins
(如果你想知道更多,谷歌它)。
需要此表是因为您有many to many
关系,这意味着每个挑战可以有多个练习,但每个练习也可以有多个挑战。那时做一个额外的表是一个标准,所以你没有多余的数据,这个表通常被称为junction table
.
如果你想要背景,只需谷歌它,这个主题有大量数据。