web-dev-qa-db-ja.com

XML_LOAD()を使用してXMLファイルをMySQLデータベーステーブルにインポートする方法。関数

次のようなXMLファイルがあります。

    <?xml version="1.0" encoding="UTF-8"?>

<resultset statement="YOUR SQL STATEMENTS TO GENERATE THIS XML FILE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>

私はSQLステートメントを使用してMySQLにインポートしようとしています:

use databasename;
LOAD XML LOCAL INFILE '/pathtofile/file.xml' INTO TABLE my_tablename;

テーブルmy_tablenameには次のフィールドがあります。

id (auto increment id)
personal_number(varchar)
firstname(varchar) 
lastname(varchar)
email(varchar) 
start_time(varchar)
end_time(varchar)
employee_category(varchar)

エラーが発生します:エラーコード:1136列カウントが行1の値カウントと一致しません

MySQL 5.1.56を使用しています

データベーステーブルのフィールドIDがXMLファイルに存在しないため、このエラーが発生したと思います。インポート中にid列をスキップし、id列の自動インクリメント機能に依存するように、組み込み関数のMySQLクエリを使用してこのXMLファイルをインポートするにはどうすればよいですか? MySQLでXMLファイルのインポートを処理するスマートな方法はありますか?列マッピングを指定できるようにするより良いステートメントがあるかもしれませんか?

ありがとうございました!

46
Cninroh

次のようなフィールドを指定できます。

LOAD XML LOCAL INFILE '/pathtofile/file.xml' 
INTO TABLE my_tablename(personal_number, firstname, ...); 
46
dnagirl

IDは自動インクリメントなので、ID = NULLを次のように指定することもできます。

LOAD XML LOCAL INFILE '/pathtofile/file.xml' INTO TABLE my_tablename SET ID = NULL;

5
Jayanth