2011-03-03 98 views
0

我有一个包含文本字段的表,根据行,字段中有大约3到4个句子。从mysql中的文本字段中提取特定单词

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

例子:我喜欢fishsticks,fishhat也很棒

在我的自动完成,如果我可以键入“鱼”,将提出“fishsticks”和“fishhat”

一切正常但查询。

我可以很容易找到包含特定单词的行,但我无法只提取单词,而不是全文。

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

我知道它很脏,但我无法重新排列数据库。

谢谢你的帮助!

编辑:

这里是我,感谢布伦特·沃登,这是不干净的,但它的工作原理:

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表达任何想法?

+0

你在你的表格应用SQL全文搜索的价值? – Majd 2011-03-03 19:06:17

回答

0

使用LOCATE来查找单词的出现。

使用LOCATE和前面的LOCATE返回值来查找单词后第一个空格的发生。

USE SUBSTR和前面的2 LOCATE返回值来提取整个单词。

HTH。

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); 
相关问题