1

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

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

文本字段示例:我喜欢鱼棒,鱼帽也很棒

在我的自动完成中,如果我输入“fish”,它会建议“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一遍又一遍地使用相同的表达式的任何想法?

4

2 回答 2

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);
于 2013-01-30T13:20:28.083 回答
0

用于LOCATE查找单词的出现。

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

USESUBSTR和前 2 个LOCATE返回值提取整个单词。

于 2011-03-03T18:52:17.967 回答