1

これはばかげた質問かもしれませんが、Googleで答えを見つけたり、プログラムで答えを作成したりできないようです。MySQL データベースにインポートしたい、contacts2.csv (カンマ区切り) という巨大な CSV ファイルがあります。ここで注意が必要なのは、DB にデータを配置したいフィールドが既にたくさんあるのに、それらが CSV と一致しないことです。

たとえば、CSV の最初の列は「Company」かもしれませんが、実際には MySQL の 5 番目の列です。また、現在 129483653 にある自動インクリメントの「id」列もあり、これらがインポートされるときに自動インクリメントを維持したいと考えています。

データを表示して新しいテーブルにインポートするためのスクリプトをオンラインでいくつか見つけましたが、何も上書きせずにこれらすべてのレコードを既存のテーブルに追加する必要があります。

ありがとうございました

CSV から MySQL へのコンバーターを使用して、出力用にこれを取得しました。

CREATE TABLE `tempcontacts` ( 
`company` varchar(255) NOT NULL DEFAULT '', 
`contact` varchar(255) NOT NULL DEFAULT '', 
`address_1` varchar(255) NOT NULL DEFAULT '', 
`city` varchar(255) NOT NULL DEFAULT '', 
`state` varchar(255) NOT NULL DEFAULT '', 
`zip` varchar(255) NOT NULL DEFAULT '', 
`phone` varchar(255) NOT NULL DEFAULT '', 
`fax` varchar(255) NOT NULL DEFAULT '', 
`title` varchar(255) NOT NULL DEFAULT '', 
`phone_ext_` varchar(255) NOT NULL DEFAULT '', 
`web_site` varchar(255) NOT NULL DEFAULT '', 
`e_mail` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `tempcontacts` VALUES 
('Construction', 'Bill Billy', '4201 State Route 1', 'Orlando', 'FL', '11111', '312-922-2125', '', '', '235', 'www.construction.com', ''), 

これは、「連絡先」と呼ばれる実際のテーブルの「挿入」コマンドに何らかの方法で切り替えることはできませんか?

更新:これをすべて行うには、何かカスタムを書くのを誰かに手伝ってもらう必要があるかもしれません。私が試してみました:

http://www.codewalkers.com/c/a/Database-Code/PHP-CSV-Importer-20/

http://www.geeklog.net/forum/viewtopic.php?showtopic=71161

他のソースの中でも。

4

2 に答える 2

2

あなたの最善の策は、mysqlテーブルをcsvファイルの順序に並べ替えることだと思います。次に、必要な順序で mysql テーブルを並べ替えます。それはモッシュポッシュの回避策です。順序を台無しにしても、すべてが var(255) であるため、列の名前を変更するだけです

編集:

行が正しい順序である限り、1 が 1 行目に、2 が 2 行目にあり、列が正しい順序になっている限り、テーブルと一致するように csv の Company、contact、address_1 などData Infileスクリプトを使用するだけです

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

csvファイルをインポートする必要があったときの例:

LOAD DATA INFILE '/usr/name/file.csv' INTO TABLE `mytable`
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

次に、auto_increment を使用して列の主キーを追加するだけです

これを使用したのは、一度データベースにインポートする必要があるものがたくさんある Excel シートを誰かが持っていたからです。私はまだデータベースに関するすべてを学んでいるので、これを日常的なスクリプトにした場合にセキュリティ上のリスクがあるかどうかはわかりません。

編集:

http://dev.mysql.com/doc/refman/5.0/en/load-data.htmlの例の 1 つを使用して

LOAD DATA INFILE '#{DATA_FILE_NAME}' IGNORE
INTO TABLE zipcodes
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'
(city, state_code, @zip, area_code, county_fips, county_name, @preferred, timezone, 
dst, lat, lon, msa, pmsa, @city_abbreviation, ma, zip_type)

ただし、これを行うには、CSV ファイル内のすべての行 (行) が同じパターンに従っている必要があります。つまり、会社名、所有者 ID、名前、役職、住所の順に、ハード エンター (\n) を入力します。

だからそれは次のように見えるはずです

PharmacyPlace, 2222, Bob Pills, Pharmacists Awesome Man, 51 Main st
Walmart, 12331, Anna Smith, Manager, 99 main st

同じパターンを維持する

他の方法の行がある場合は、それを修正する必要がありますが、次の場合:

Taco Bell,,,Manager, 59 Main st

次に、各コンマは次の列に移動することを伝えます。

したがって、この例でデータベースにアップロードするスクリプトは次のようになります。

LOAD DATA INFILE 'DATA_FILE_NAME' INTO TABLE `your table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(company, ownerid, name, title, address);

最初にテーブルをバックアップしてから、それを一時的に別のテーブルにコピーして、これをすべてテストします。あなたはいくつかの試行錯誤をしなければならないでしょう。私が言ったように、モッシュポッシュソリューション。

于 2012-05-25T17:17:56.037 に答える
1

この道を週に十数回旅行する人からの一言。一時テーブルにインポートし、SQLエンジンまたはPHPスクリプトを使用してそこからそれを把握することの利点は、一致/マッピングおよび希望を試みることの悲しみをはるかに上回ります。ここで以前にこれに答えました。私の意見ですが、私は間違っている可能性があります。

編集した質問からの作業:そのコンバーターは、このようなものを変更できるINSERTステートメントを生成しました。テーブルをファイナルテーブルに変更し、ファイナルテーブルの実際の列に表示される列名を、順序を変更せずに調整します(列名は、その下の:データと同じ順序である必要がありますが、そうする必要はありません。テーブル構造と同じ順序である)

INSERT INTO `contacts` 
(`company`, `contact`, `address_1`, `city`, `state`, `zip`, `phone`, `fax`, `title`,     `phone_ext_`, `web_site`, `e_mail`) 
VALUES
('Construction1','Bill Billy','4201 State Route 1','Orlando','FL','11111','312-922-2125','','','235','www.construction.com',''),
('Construction2','Bill Billy','4201 State Route 1','Orlando','FL','11111','312-922-2125','','','235','www.construction.com','');

;

于 2012-05-25T16:56:33.040 に答える