从mysql中的文本字段中提取特定单词

时间:2011-03-03 18:45:19

标签: mysql sql database full-text-search full-text-indexing

我有一个包含文本字段的表格,字段中有大约3到4个句子,具体取决于行。

现在,我正在制作一个自动完成的html对象,我想开始输入一个单词的开头,并且数据库会返回以数据库文本字段中的那些字母开头的单词。

文本字段的示例:我喜欢fishsticks,fishhat也很棒

在我的自动完成中,如果我输入“fish”,它会提出“fishsticks”和“fishhat”

一切都有效,但查询。

我可以轻松找到包含特定单词的行,但我不能只提取单词,而不能提取全文。

select data_txt from mytable match(data_txt) against('fish', IN BOOLEAN MODE) limit 10

我知道它很脏,但我不能重新安排数据库。

感谢您的帮助!

编辑:

这就是我得到的,多亏了Brent Worden,它不干净但是有效:

SELECT DISTINCT
SUBSTRING(data_txt, 
LOCATE('great', data_txt),
LOCATE(' ' , data_txt, LOCATE('great', data_txt)) - LOCATE('great', data_txt)
)
 FROM mytable WHERE data_txt LIKE '% great%'
LIMIT 10

关于如何避免反复使用相同LOCATE表达式的任何想法?

2 个答案:

答案 0 :(得分:0)

使用LOCATE查找单词的出现次数。

使用LOCATE和之前的LOCATE返回值来查找单词后第一个空格的出现位置。

使用SUBSTR和之前的2 LOCATE个返回值来提取整个单词。

HTH。

答案 1 :(得分:0)

$tagsql ="SELECT * from mytable";
$tagquery = mysql_query($tagsql);

$tags = array(); //Creates an empty array

while ($tagrow = mysql_fetch_array($tagquery)) {

   $tags[] = tagrow['tags']; //Fills the empty array

}

如果行包含逗号,您可以使用 -

 $comma_separated = implode(",", $tags);

如果空格中的空格分隔为空格,则可以替换空格的逗号。

$exp = explode(",", $comma_separated);

如果您要求您的数据是唯一的,则可以包含以下内容:

$uniquetags = array_unique($exp, SORT_REGULAR);

您可以使用print_r查看结果的结果

这里使用了array_merge,因为如果使用'jquery'自动完成,$ rt将不会显示,否则$ rt可能会工作,并且array_merge可以被忽略。但是,您可以通过重复上一个过程来使用array_merge来包含多个表。

$autocompletetags = array_merge((array)$uniquetags);

按字母顺序对值进行排序

sort($autocompletetags, SORT_REGULAR);