この PHP スクリプトは何度も作成しましたが、国家統計局が提供するデータ形式が若干変更されたため、質問には PHP と MySQL の両方が含まれており、非常に適切だと感じました。多くの場合、質問の種類は求職者の基本的な資質を最もよく反映しています。
準備作業: 郡以上の最新の行政区画コードをダウンロードし、data.txt ファイルとして保存する必要があります。
郡以上の最新の行政区画コード
まず MySQL テーブルを作成します:
テーブルの文字セットとファイルの文字セットは一致している必要があることに注意してください。
`region` が存在しない場合はテーブルを作成 (
`id` int(10) unsigned NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
`name` varchar(20) NOT NULL,
主キー (`id`)、
KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB;
補足: 階層データの保存の改善: データベースへの階層データの保存に関する記事。
次に、PHP スクリプトを作成します。
data.txt ファイルの内容の合法性を確認する必要があり、コード自体は厳密に禁止されている検証の対象になっていないことに注意してください。
//設定
$host = '';
$dbname = '';
$charset = '';
$ユーザー名 = '';
$パスワード = '';
set_time_limit(0);
$dsn = "mysql:host={$host};dbname={$dbname};charset={$charset}";
$オプション = 配列(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
$dbh = 新しい PDO($dsn, $username, $password, $options);
$handle = fopen('data.txt', 'r');
$parent = array();
while (!feof($handle)) {
$row = トリム(fgets($handle));
if (!preg_match('/(d+)(s+)(.+)/', $row, $matches)) {
続けます;
}
list($row, $id, $delimiter, $name) = $matches;
if (!isset($separator)) {
$separator = $delimiter;
}
$level = substr_count($delimiter, $separator);
$parent_id = $level > 1 ? $parent[$level - 1] : 0;
$parent[$level] = $id;
$sth = $dbh->prepare('
リージョンに挿入 (id、parent_id、name)
値 (:id、:parent_id、:name)
');
$sth->bindValue(':id', $id, PDO::PARAM_INT);
$sth->bindValue(':parent_id', $parent_id, PDO::PARAM_INT);
$sth->bindValue(':name', $name);
$sth->execute();
}
fclose($handle);
?>
注: 独自の状況に応じて構成オプションを入力して、実行します。
……
公式の行政区画コードとプライベートIPデータベースを使用すると、さらに完璧になります。
著者: ラオ・ワン