我用 PHP 从文章中提取关键词,平均一篇文章大约产生 100 多个词,需要录入 Mysql 的三个表,一个文章表,这个好说,一个词语表,结构如下:
id 自动递增,主键
term 词语,唯一索引
第三个表就是词语和文章的关系表(哪个词出现在哪个文章里?)。
给定词语 T,要取得它在词语表里的 ID —— 如果尚不存在,则插入之。
最笨的办法是,先 SELECT id from 词语表 WHERE term = 'T',若没有就 insert into ,再获取 ID。
一个词好说,但问题是,现在一篇文章产生了 100 多个词,总不能也这么干吧。请问如何批量取得这些词的 ID —— 如果某个词不在就插入?
我想用存储过程来办,但 Mysql 的存储过程能接收数组吗?或者存储过程接收一个TEXT参数,把 100 多个词用特殊字符拼起来?
求思路,谢谢!!
用存储过程搞定了,大家可以把下面代码粘到NAVICAT里试一下:
CREATE DEFINER=
root
@%
PROCEDUREfTest
(IN a_Terms TEXT)BEGIN
END
然后新建查询,执行:
CALL fTest('abc,你们,好')
输出:
abc
你们
好
现在只需执行两个查询就能完成任务:
1 把文章插入到文章表,取得自动递增ID
2 把所有词用逗号连接成一个字符串,和文章ID一起作为参数,调用存储过程,由它负责解码各个词,查询它们的ID,按需插入到词语表,最后把每个词的ID和文章ID一起插入到关系表中。