更新に関する質問があれば、更新された回答:
このテーブルを分割しても何のメリットもありません
id | some_unique_field | name | sex | university
このテーブルは必ず分割する必要があります:
id | fundraiser_id | donation_amount | name | sex | university
これに:
donation
id | fundraiser_id | donation_amount | donator_id
fundraiser
id | charity | ....
donator
id | name | sex | university
これにより、1人あたりの寄付額を簡単に取得できるようになります。
スプレッドシートをインポートする場合は、次のようにすることをお勧めします:
ステップ1:次のようなブラックホールテーブルを作成します:
DROP TABLE IF EXISTS `test`.`bh_donations`;
CREATE TABLE `test`.`bh_donations` (
`fundraiser_name` varchar(45) NOT NULL,
`donation_amount` decimal(10,2) NOT NULL,
`name` varchar(45) NOT NULL,
`sex` char(1) NOT NULL,
`university` varchar(45) NOT NULL
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;
id
は必要ありません ここにありますが、コードが単純化されている場合は、必ず追加してください。
ステップ2、ブラックホールテーブルにトリガーを追加して処理します。
DELIMITER $$
CREATE TRIGGER bi_bh_donations BEFORE INSERT ON bh_donations FOR EACH ROW
BEGIN
DECLARE mydonater_id integer;
DECLARE myfundraiser_id integer;
SELECT f.id INTO myfundraiser_id FROM fundraiser f
WHERE f.name = new.fundraiser_name LIMIT 1;
IF f.id IS NULL THEN BEGIN
SELECT error_fundraiser_is_unknown FROM table_error;
END; END IF;
SELECT d.id INTO mydonator_id FROM donator d
WHERE d.name = new.name AND d.sex = new.sex AND d.university = new.university
LIMIT 1;
IF mydonator_id IS NULL THEN BEGIN
INSERT INTO donator (name, sex, university)
VALUES (new.name, new.sex, new,university);
END; END IF;
SELECT LAST_INSERT_ID() INTO mydonator_id;
INSERT INTO donation (fundraiser_id, donation_amount, donator_id)
VALUES (myfundraiser_id, new.amount, mydonater_id);
END$$
DELIMITER ;
ステップ3LOADDATAINFILEを使用してデータをインポートします
LOAD DATA INFILE 'data.csv' INTO TABLE bh_donations
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
これで、ExcelファイルをCSVとして保存することで、Excelの行をブラックホールテーブルに読み込むことができます。
そしてLOAD DATA INFILE
を使用します。 データをブラックホールテーブルに読み込みます。
参照:ブラックホールテーブル: http://dev。 mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
その他のブラックホール:ブラックホールエンジンのクリエイティブな使用法
トリガー: http://dev.mysql.com /doc/refman/5.5/en/triggers.html
データをファイルにロード: http:// dev .mysql.com / doc / refman / 5.5 / en / load-data.html
これがお役に立てば幸いです。