MySQL - 将单个ID号与多个ID号相关联

时间:2017-04-29 22:02:07

标签: php mysql logic relational-database

我有一个JSON文件,我将通过PHP程序运行以填充MySQL数据库。

我有大多数数据库表和列,但我遇到了逻辑问题。

我正在处理会议,以及参加会议的人。

每个人都要参加多个独特的会议,每次会议都有多人参加。

每个人都有一个唯一的ID,每个会议都有一个唯一的ID。

我的问题:

我知道我不能为每个人在一行中放置多个ID,所以我试图想办法将一个人的ID与多个会议ID联系起来-versa。

最终,我希望能够运行将返回某人参加的所有会议以及参加会议的人员的查询。

以下是我对某人的信息示例:

 "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"
},

1 个答案:

答案 0 :(得分:0)

扩展我的comment,基本原则就是这样。现在请记住,这是我在头脑中编写的未经测试的代码,我在这里做了很多假设,比如使用PDO和预处理语句,并且您已经有了在{{{}中插入数据的查询1}}和people表,更不用说JSON数据的结构了。

您必须对此进行调整以使其适合您的具体情况,此示例仅用于说明如何解决此问题的概念。

导入脚本:

meetings

然后您需要获取详细信息:

$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); ,所以如果它不像我写的那样完全没有工作,那就不要感到惊讶。如果出现问题,我确定有人会纠正我: - )