-1

配列を 2 つの異なる列に分割したいと考えています。そして、これらの2つの区切られた列を(ID、名前)としてテーブルの2つの列としてエントリを作成します。特定のIDには複数の名前があります。

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

上記は私の配列です。データベースに入力するにはどうすればよいですか。助けてください。これまでのところ、爆発機能を使用してみました。explode(' ,' , $output) しかし、私は結果が異なります

4

2 に答える 2

5

探している SQL パターンは、1 対多の関係です。1 つのテーブルを使用して、複数の名前を 1 つの 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 に答える