探している 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;
}