用存储过程搞定了,大家可以把下面代码粘到NAVICAT里试一下:
CREATE DEFINER=root@% PROCEDURE fTest(IN a_Terms TEXT)
BEGIN
DECLARE l_TermsLen, l_TermLen INT;
DECLARE l_Term VARCHAR(20);
— 测试用的临时表
DROP TABLE IF EXISTS temp_terms;
CREATE TEMPORARY TABLE temp_terms (c_Term VARCHAR(20));
SET l_TermsLen = CHAR_LENGTH(a_Terms);
WHILE (l_TermsLen > 0) DO
SET l_Term = SUBSTRING_INDEX(a_Terms, ‘,’, 1);
SET l_TermLen = CHAR_LENGTH(l_Term);
SET a_Terms = SUBSTRING(a_Terms, l_TermLen + 2);
SET l_TermsLen = l_TermsLen – (l_TermLen + 1);
— 按需把l_Term插入到词语表,取得ID;这里插入到临时表,最后显示出来
INSERT INTO temp_terms VALUES (l_Term);
END WHILE;
— 显示拆分出的词语
SELECT * FROM temp_terms;
END
然后新建查询,执行:
CALL fTest(‘abc,你们,好’)
输出:
abc
你们
好
现在只需执行两个查询就能完成任务:
1 把文章插入到文章表,取得自动递增ID
2 把所有词用逗号连接成一个字符串,和文章ID一起作为参数,调用存储过程,由它负责解码各个词,查询它们的ID,按需插入到词语表,最后把每个词的ID和文章ID一起插入到关系表中。