Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql和php的关联(连接)表_Php_Mysql_Sql_Database_Many To Many - Fatal编程技术网

使用mysql和php的关联(连接)表

使用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 | ------------

我有两张桌子:

用户表:用户id,名称 课程表:课程id,内容 用户表

课程表

如何将用户表中的每一行与课程表中的所有行相关联

我想关联如下所示:

----------------------------------------
| 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)";