我希望根据本地数据文件中的外键查找将数据插入表中,但我不确定语法。我有一个单词列表:
jamba
fire
street
road
在我希望使用
插入表格的文件中LOAD DATA LOCAL INFILE '$PATH'
INTO TABLE b1
FIELDS TERMINATED BY '\n'
(SELECT id FROM dictionary
WHERE dictionary.word='word-from-file');
更好地描述项目:我正在尝试从字典创建一个外键表来布局书籍,比如使用词典条目号而不是单词来订购书。
那就是:句子The quick brown fox jumped over the lazy dog
在表格中会1024 891 26 51 75 521 1024 762 1024 641 45
(完全猜测),但每个数字都是字典中单词的id号。
第一个表格是字典:
Field Type
id word
word varchar(128)
第二张表是书,b1:
Field Type
pos int #Position of the word, essentially an id
wid int #A foreign key corresponding to a dictionary.word
案例敏感性至关重要。不要和别人说两个不同的词。
基本上我正在尝试执行@revo中此SO答案中解释的操作: Insert mysql on foreign key id php但使用本地数据文件中的字段而不是单独的表。
注意:区分大小写很重要!我已经根据
定义了字典单词字段CHARACTER SET utf8 COLLATE utf8_bin
答案 0 :(得分:1)
您可以使用SET
子句。还要处理行终止符(Windows OS中的\r\n
):
LOAD DATA LOCAL INFILE 'path-to-file'
INTO TABLE `b1`
LINES TERMINATED BY '\n'
(@word)
SET `wid` = (SELECT `id` FROM `DICTINARY` `d` WHERE BINARY `d`.`word` = @word);
答案 1 :(得分:0)
LOAD
将新列表添加到一个额外的表格中,该表格中包含额外的ID列,默认为NULL
。INSERT .. SELECT .. WHERE .. NULL
将任何新单词插入字典。UPDATE
以撤回所有单词的ID。这将进入额外的专栏。id
而不是word
)复制到其他表格中。我会详细介绍here。
同时,请务必在COLLATION
列中存在的任何表格中使用相同的utf8_bin
(例如word
。
对于您的应用程序来说应该非常快如果整理匹配且字典在word
上有索引。
不匹配的归类导致不使用索引,这将非常慢。