-1

我想将一个数组分成两个不同的列。并将这 2 个单独的列作为表的 2 列作为 (ID , Name) 的条目。对于特定的 ID,我有多个名称。

  ($output)
  (
    [0] => 109      ABC
    [1] => 110      CDEEE
    [2] => 109      EFGHI
    [3] => 111      PIJFJJF
  )

以上是我的数组。我如何进入数据库。请帮忙。到目前为止,我已经尝试过使用爆炸功能。explode(' ,' , $output) 但我得到的结果不同

4

2 回答 2

5

您正在寻找的 SQL 模式是一对多的关系。它可以使用一张表将多个名称映射到一个 id:

Names
---------
Name VARCHAR(255) NOT NULL (Primary Key)
Id   INT NOT NULL (Index)

您可以使用以下命令创建此表:

CREATE TABLE Names(
    Name VARCHAR(255) NOT NULL,
    Id   INT          NOT NULL,
    PRIMARY KEY(`Name`),
    INDEX `Id_idx` (`Id`)
);

然后,您可以使用以下方法将每个 id 的每个名称插入到数据库中:

INSERT INTO Names (Name, Id) VALUES('ABC', 109);

使用PDO 准备的查询,您可以执行以下操作:

$stmt = $dhb->prepare('INSERT INTO Names (Name, Id) VALUES(:name, :id)');

foreach($names as $nameStr) {
    list($id, $name) = explode(' ', $nameStr); // split "109 ABC" into id: 109 and name: ABC
    $stmt->execute(array(
        ':id' => $id,
        ':name' => $name
    ));

}

要检索索引的所有名称,您可以使用此 PDO 查询:

$id = 123;
$names = array();

$stmt = $dbh->prepare('SELECT Name FROM Names WHERE Id = :id');
$stmt->execute(array(':id' => $id));

while(($newName = $stmt->fetchColumn(0)) !== false) {
    $names[] = $newName;
}
于 2013-06-18T04:34:30.960 回答
1

将 foreach 循环与您的数组一起使用,例如

$sql = "INSERT INTO my_table (ID,Name) VALUES";
$i = 0;
$my_id = "your id";
$my_cnt = count($my_array);
foreach($my_array as $name) {
      $exploded = explode(' ',$name);
      $sql .= "($exploded[0],$exploded[1])";
      if($i++ < $my_cnt) 
         $sql .= " , ";
}
echo $sql;

然后执行查询 $sql

于 2013-06-18T04:31:14.000 回答