Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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
Php MySQL-将单个ID号关联到多个ID号_Php_Mysql_Logic_Relational Database - Fatal编程技术网

Php MySQL-将单个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

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

我已经准备好了大多数数据库表和列,但是我有一个逻辑问题

我处理的是会议和参加会议的人

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

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

我的问题:

我知道我不能将每个人的多个ID放在一行中,因此我正在设法将一个人的ID与多个会议ID关联起来,反之亦然。

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

以下是我为一个人提供的信息示例:

 "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
,即可检索所有参加会议的人,或一个人参加的所有会议。我将在回答中给出一个示例,因为这些示例更适合于多行代码示例。