使用mysql和php的关联(连接)表
我有两张桌子: 用户表:用户id,名称 课程表:课程id,内容 用户表 课程表 如何将用户表中的每一行与课程表中的所有行相关联 我想关联如下所示:使用mysql和php的关联(连接)表,php,mysql,sql,database,many-to-many,Php,Mysql,Sql,Database,Many To Many,我有两张桌子: 用户表:用户id,名称 课程表:课程id,内容 用户表 课程表 如何将用户表中的每一行与课程表中的所有行相关联 我想关联如下所示: ---------------------------------------- | user_id | name | course_id | content | ---------------------------------------- | 1 | x | 1 | a | ------------
----------------------------------------
| user_id | name | course_id | content |
----------------------------------------
| 1 | x | 1 | a |
----------------------------------------
| 1 | x | 2 | b |
----------------------------------------
| 1 | x | 3 | c |
----------------------------------------
| 2 | y | 1 | a |
----------------------------------------
| 2 | y | 2 | b |
----------------------------------------
| 2 | y | 3 | c |
----------------------------------------
我已经创建了一个associationjunction表user\u course:user\u id和course\u id,但不知道如何填充它
我用于插入的代码如下所示:
注意:$last_insert_id是用户注册的,但是如何获取所有
课程ID(以$ID为单位)
请提出一些实现方法?没错
如果可以在任何课程中注册任何用户,则可以使用您举例说明的模式创建一个名为users\u courses的表,该表允许N:N关系
通过这种方式,您允许用户没有课程、一门课程甚至所有课程。您可以使用将所有现有课程附加到用户
例如SQL:
INSERT INTO user_course (user_id, course_id)
SELECT FROM <user_id>, course_id FROM course
如果要将所有课程附加到所有用户,可以使用以下查询
INSERT INTO user_course (user_id, course_id)
SELECT FROM user.user_id, course.course_id FROM user, course
many:many表通常需要2列—将ID放入它关联的两个表中。不要冗余地包含两个表中已经存在的名称等 在你的例子中也需要这样做
PRIMARY KEY(user_id, course_id),
INDEX(course_id, user_id)
这些功能可以让您高效地从用户映射到课程,反之亦然
我将在中进一步讨论这些表。您可以使用交叉连接来获得所需的结果:
INSERT INTO user_course
SELECT * FROM user CROSS JOIN course;
最后,我得到了一个结果——将insert…select与交叉连接结合使用 以下是连接表的代码:
$id = lastInsertId;
$query = "INSERT INTO user_course ( user_id, course_id ) ( SELECT A.user_id, B.course_id FROM user A CROSS JOIN course B WHERE A.user_id = $id)";
试试多对多,看看?看起来你已经找到了答案,所以你应该做一些尝试,如果你遇到了一些问题,再回来。该代码试图将文本SELECT id FROM course存储在vid列中。不确定你到底想用这段代码做什么。如果您的代码有问题,请向我们展示所有相关代码以及正确的表定义。你还应该解释你的实际问题是什么。你到底在挣扎哪一部分?您说我正在获取输出,但这里没有代码指示您从数据库获取任何内容或输出任何内容。我建议您不需要创建关联表。当您列出内容时,您将拥有一个包含所有课程的对象。如果用户尝试任何课程,则可以填充一个显示用户id和课程id的表,但复制课程表中的内容没有明显的好处。您想在User\u course表中添加什么?@Peace您想要一个脚本将所有用户与所有课程关联起来吗?要将所有用户与表中的所有课程关联起来,您可以尝试以下操作:在users\u courses中插入选择User\u id,course\u id from User,course@和平-不要要求我们为你做所有的工作,你需要在要求之前做一些尝试。所以这不是免费的编码服务。这个问题基本上变成了一个gimme代码问题。您已经提到了一种方法,可以进行测试。选择:user\u id此语法记录在哪里?“我认为这不管用。”“哦。这是个错误。我修正并更新了我的答案我认为这与@rika answer有关,我认为他的答案必须被接受才能获得赏金
INSERT INTO user_course (user_id, course_id)
SELECT FROM user.user_id, course.course_id FROM user, course
PRIMARY KEY(user_id, course_id),
INDEX(course_id, user_id)
INSERT INTO user_course
SELECT * FROM user CROSS JOIN course;
$id = lastInsertId;
$query = "INSERT INTO user_course ( user_id, course_id ) ( SELECT A.user_id, B.course_id FROM user A CROSS JOIN course B WHERE A.user_id = $id)";