我的数据库存在逻辑问题,请让我解释一下。这是我的系统:
- 我有用户和管理员。
- 管理员可以创建项目,如果需要,他们可以在项目中添加相关用户。
- 1 个用户可以处理多个项目,1 个项目可以拥有多个用户。(多对多)
我建立了关系数据库,它工作得很好。但问题是,哪些用户正在处理哪些项目?我不知道如何将它们插入数据库。管理员可以从列表中选择用户,然后所选用户应与依赖项目一起存储。但我无法将其插入数据库。这是我的表格和一些代码。
--projects-- --users-- --projectUsers--
userId userId userId
creationDate registerDate projectId
projectId email
title permission
priority name
content surname
endDate birthDate
password
$sql="INSERT INTO projects (
projectId,
userId,
creationDate,
title,
priority,
content,
endDate
)VALUES(
'$projectId',
'$userId',
'$creationDate',
'$title',
'$priority',
'$content',
'$endDate'
)";
$result=mysql_query($sql) or die (mysql_error());
$sql2="INSERT INTO projectUsers (
projectId,
userId
)VALUES(
'$projectId',
'$userId'
)";
$result2=mysql_query($sql2) or die (mysql_error());
表“projectUsers”存储 2 个外键。当管理员创建项目时,他的 userId 和新的projectId 存储在“projectUsers”中,并且还存储在“projects”表中。但是管理员将选择该项目所依赖的用户,并且他可以一次选择多个用户。我应该如何在数据库上插入依赖用户。而且我不想连续存储超过 1 个用户。我应该能够回答这个问题:
- 哪些用户正在处理哪些项目?
- 哪些用户正在参与该项目?
- 该用户正在从事哪个(哪些)项目?
示例:管理员创建一个新项目并选择 3 个从属用户。我想将它们插入表“projectUsers”。当管理员创建项目时,我想看到我的“projectUser”表,如下所示:
userId projectId
1 1
2 1
3 1
P.S:“项目”表中的“userId”显示了该项目的创建者。就像一个主人一样。
最佳答案
从项目表中删除 userId
,无论如何,您都会将该信息存储在 ProjectUsers
关联表中。对于参与项目的每个用户,您必须在 ProjectUsers
表中创建单独的行。
从那时起,您的所有检索查询都只是基本的三个表连接:
<强>1。哪些用户正在处理哪些项目?
SELECT * FROM Projects p
LEFT JOIN ProjectUsers pu
ON p.projectId = pu.projectId
LEFT JOIN Users u
ON pu.userId = u.userId
<强>2。哪些用户正在参与该项目?
SELECT * FROM Projects p
LEFT JOIN ProjectUsers pu
ON p.projectId = 123 AND p.projectId = pu.projectId
LEFT JOIN Users u
ON pu.userId = u.userId
<强>3。该用户正在从事哪些项目?
SELECT * FROM Users u
LEFT JOIN ProjectUsers pu
ON u.userId = 123 AND u.userId = pu.userId
LEFT JOIN Projects p
ON pu.projectId = p.projectId
关于PHP 如何一次多次插入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374900/