我的数据库有一个逻辑问题,让我解释一下。这就是我的系统:
- 我有用户和管理员。
- 管理员可以创建项目,如果他们需要,他们可以在项目中添加相关用户。
- 一个用户可以工作多个项目,一个项目可以有多个用户。(多对多)
我建立关系数据库,它工作得很好。但问题是,哪些用户在哪个项目上工作?我不知道如何将它们插入数据库。管理员可以从列表中选择用户,然后选择的用户应该与相关项目一起存储。但我无法成功地将其插入数据库。这是我的表格和一些代码。
--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和新项目id存储在"projectUsers"表中,也存储在"projects"表中。但是管理员将选择哪些用户将依赖于这个项目,他可以一次选择多个。如何在数据库上插入依赖用户?而且我不想在一行中存储超过1个用户。我应该能够得到这个查询的答案:
- 哪些用户正在哪个项目上工作?
- 哪些用户正在处理这个项目?
- 该用户在哪个项目上工作?
示例:Admin创建一个新项目并选择3个从属用户。我想把它们插入到"projectUsers"表中。当管理员创建项目时,我希望看到我的"projectUser"表,如下所示:
userId projectId
1 1
2 1
3 1
p。S:"projects"表上的"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
首先需要为外键创建Projects和Users,然后简单地创建1,2 &3.为选中的每个项目添加每个用户。
INSERT INTO ProjectUsers (userId, projectId) VALUES (1, 1);
INSERT INTO ProjectUsers (userId, projectId) VALUES (2, 1);
INSERT INTO ProjectUsers (userId, projectId) VALUES (3, 1);
除此之外,我们真的很难理解你的问题的背景。您已经将问题标记为SQL,但是您有执行INSERT正确的查询。我们没有一个完整的表定义——如果那样会引发错误的话。
如果你的问题是在PHP中,那么你有太多的SQL标签,因为这是人们试图解决的问题。
请,请,请将项目中的UserId更改为OwnerUserId -关于该数据字段所代表的内容的描述与指示它连接到的表一样重要,因此将这些连接在一起可以为字段提供完整的含义,并消除歧义。