sql—我正在尝试让被分配了某些内容的用户能够使用php和mysql查看它

vh0rcniy  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(333)

我试着寻找一个答案,但我真的找不到一个符合我所寻找的。
我正在制作一个小的web应用程序,允许管理员创建课程材料和测试,用户将被分配。
我想弄清楚的是,被分配了课程的用户如何通过单击按钮访问该课程。
我创建了一个存储用户信息的表,其中用户id是主键。我有一个课程表,它存储所有的材料和课程的测试,课程id是该表的主键。
我制作了第三个表,它是一个指定的表,它包含两个外键。一个引用用户表中的用户id,另一个引用课程表中的课程id。
我插入了一些图片来说明你的意思。
我不太明白如何使用sql语法来根据指定的课程表提取课程材料并进行测试。
感谢所有反馈。这是引用用户id(id)和课程id(u\u id)的两个外键

kmbjn2e3

kmbjn2e31#

不知道你有什么列名,所以我用了 * 相反。你可以用 JOIN (又名 INNER JOIN )将表格链接在一起。在两个表的主键上进行联接。
我创建了一个存储用户信息的表,其中用户id是主键。我有一个课程表,它存储所有的材料和课程的测试,课程id是该表的主键。
我曾经 id 对于用户表和 course_id 课程表。根据需要更换。
查找给定用户的所有课程。

SELECT a.*
FROM course a
JOIN assigned_course b ON a.course_id = b.id
WHERE b.u_id = :userId
;

查找给定课程的所有用户。

SELECT a.*
FROM user a
JOIN assigned_course b ON a.id = b.u_id
WHERE b.id = :courseId
;

编辑#1-不带联接的子查询
谢谢你的反馈,正如我上面说的,我希望避免加入。
我强烈建议你学会加入。当您需要查询多个表时,它们是必不可少的。在这种情况下,您可以使用子查询为用户查找匹配的课程,但不能同时访问该用户数据;这就是连接的力量。下面我将包含最后一个示例,演示如何同时获取课程和用户数据。
查找给定用户的所有课程(使用子查询)

SELECT a.*
FROM course a
WHERE course_id IN (
    SELECT id
    FROM assigned_course b 
    WHERE u_id = :userId)
;

最后一个示例显示与用户相关的课程(多对多)

SELECT * -- You now have access to a, b, and c data
FROM course a
JOIN assigned_course b ON a.course_id = b.id -- joined by PKs
JOIN user c ON c.id = b.u_id -- joined by PKs
WHERE c.id = :userId
;
h5qlskok

h5qlskok2#

在我看来,您似乎想使用sql联接语法,如下所示:

select column1, column2, column3 etc...
from table1
join course on table1.id = course.id 
join assigned_course on table1.id = assigned_course.id

更换 column1,2,3 用实际列名替换 foreign_key_name 子表中外键的实际名称与 user_primary_key 您可以在这里找到其他一些mysql连接示例
至于如何将它们实现到html或php文件中,这是一个非常不同的问题,需要更多地了解如何在表单中设置代码
一个非常用户友好的地方是,这里可能有助于提取数据,只要确保您知道为您的代码使用准备好的语句

相关问题