Php MySQL-将单个ID号关联到多个ID号
我有一个JSON文件,我将通过PHP程序运行它来填充MySQL数据库 我已经准备好了大多数数据库表和列,但是我有一个逻辑问题 我处理的是会议和参加会议的人 每个人都要参加多个独特的会议,每个会议都有多人参加 每个人都有一个唯一的ID,每个会议都有一个唯一的ID 我的问题: 我知道我不能将每个人的多个ID放在一行中,因此我正在设法将一个人的ID与多个会议ID关联起来,反之亦然。 最终,我希望能够运行查询,返回有人参加的所有会议以及参加会议的人员 以下是我为一个人提供的信息示例:Php MySQL-将单个ID号关联到多个ID号,php,mysql,logic,relational-database,Php,Mysql,Logic,Relational Database,我有一个JSON文件,我将通过PHP程序运行它来填充MySQL数据库 我已经准备好了大多数数据库表和列,但是我有一个逻辑问题 我处理的是会议和参加会议的人 每个人都要参加多个独特的会议,每个会议都有多人参加 每个人都有一个唯一的ID,每个会议都有一个唯一的ID 我的问题: 我知道我不能将每个人的多个ID放在一行中,因此我正在设法将一个人的ID与多个会议ID关联起来,反之亦然。 最终,我希望能够运行查询,返回有人参加的所有会议以及参加会议的人员 以下是我为一个人提供的信息示例: "Distric
"District": "Massachusetts District 1",
"Email": null,
"FirstName": "Lynn",
"Id": 14869,
"LastName": "Aaronson",
"MeetingIds": [
15650,
15651,
15652,
15653,
15654,
15655,
15656,
15657,
15658,
15659,
15660
]
},
这是一次会议:
{
"AddressLine1": "717 Hart Senate Office Building",
"AddressLine2": "120 Constitution Avenue, NE",
"CongressPersonID": 8766,
"CongressPersonStateDistrict": "WI",
"ConstituentIds": [
14810,
14811
],
"End": "2014-05-08T10:15:00.0000000-04:00",
"Id": 15898,
"Location": "SH717 ",
"MeetingWith": "Kathleen Laird",
"Name": "Sen. Tammy Baldwin",
"PhoneNumber": "(202) 224-5653",
"Start": "2014-05-08T10:00:00.0000000-04:00",
"Status": "Confirmed"
},
在我看来,基本原则是这样的。现在请记住,这是我从头写下的未经测试的代码,我在这里假设了很多,比如使用PDO和准备好的语句,并且您已经有了将数据插入people
和meetings
表的查询,更不用说JSON数据的结构了
你必须调整它,使它适合你的具体情况,这个例子只是为了说明我将如何解决这个问题的概念
导入脚本:
$data = json_decode($json_data, true);
foreach ($data['meetings'] as $meeting) {
// insert meeting details into `meetings` table
$stmt = $db-prepare('INSERT INTO `meetings` ...');
$stmt->execute(array(...));
}
foreach ($data['people'] as $person) {
// insert person details into `people` table
$stmt = $db->prepare('INSERT INTO `people` ...');
$stmt->execute(array(...));
foreach ($person['MeetingIds'] as $meetingId) {
// insert attendance into `attendees` table
$stmt = $db->prepare('INSERT INTO `attendees` (`person_id`, `meeting_id`) VALUES (:person_id, :meeting_id)');
$stmt->execute(array(':person_id' => $person['Id'], ':meeting_id' => $meetingId));
}
}
然后,您需要在何处获取详细信息:
// fetch a specific person
$stmt = $db->prepare('SELECT * FROM `people` WHERE `id` = :id');
$stmt->execute(array(':id' => $person_id));
$person = $stmt->fetch(PDO::FETCH_ASSOC);
// fetch all meetings for this person
$stmt2 = $db->prepare('
SELECT `meetings`.*
FROM `attendees`
INNER JOIN `meetings`
ON `meetings`.`id` = `attendees`.`meeting_id`
WHERE `attendees`.`person_id` = :person_id
');
$stmt2->execute(array(':person_id' => $person['id']));
$meetings = $stmt2->fetchAll(PDO::FETCH_ASSOC);
如果你有一个会议,你需要找到所有参加会议的人,你可以反过来做同样的事情
我没有在实际的数据库上测试这个
JOIN
,所以如果它的工作方式与我编写的不完全一样,请不要感到惊讶。如果有错误,我相信会有人纠正我:-)与会者表(会议id,与会者id)将该关系存储在第三个表中,该表有会议id
和个人id
列。然后,您可以使用该表查找由特定人员id
参加的所有会议id
,或者查找参加特定会议id
的所有人员id
@rickdenhaan,这就是我的想法,但我不会手动将人员id
与会议id
关联。这就是让我陷入困境的原因。所有的号码都会被扔进去。也许我可以想出一个PHP函数将它们关联到第三个表中。不需要PHP函数,您只需在SQL查询中使用JOIN
,即可检索所有参加会议的人,或一个人参加的所有会议。我将在回答中给出一个示例,因为这些示例更适合于多行代码示例。