我有一个包含文本字段的表格,字段中有大约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
表达式的任何想法?
答案 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);