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

发布于 2024-10-20 07:42:46 字数 745 浏览 3 评论 0原文

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

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

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

在我的自动完成中也很棒,如果我输入“鱼”,它会建议“鱼棒”和“鱼帽”,

除了查询之外,一切都有效。

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

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 表达式有什么想法吗?

I have a table that contains a text field, there is around 3 to 4 sentences in the field depending on the row.

Now, I am making an auto-complete html object, and I would like to start typing the beginning of a word and that the database return words that start with those letters from the database text field.

Example of a text field: I like fishsticks, fishhat are great too

in my auto-complete if I would type "fish" it would propose "fishsticks" and "fishhat"

Everything works but the query.

I can easily find the rows that contains a specific word but I can't extract only the word, not the full text.

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

I know it is dirty, but I cannot rearrange the database.

Thank you for your help!

EDIT:

Here's what I got, thanks to Brent Worden, it is not clean but it works:

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

any idea on how to avoid using the same LOCATE expression over and over?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟─花易冷 2024-10-27 07:42:46

使用LOCATE 查找单词的出现位置。

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

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

Use LOCATE to find the occurrence of the word.

Use LOCATE and the previous LOCATE return value to find the occurrence of the first space after the word.

USE SUBSTR and the previous 2 LOCATE return values to extract the whole word.

把昨日还给我 2024-10-27 07:42:46
$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 可能会显示work 和 array_merge 可以忽略。但是,您可以通过重复前面的过程来使用 array_merge 来包含多个表。

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

这按字母顺序对值进行排序

sort($autocompletetags, SORT_REGULAR);
$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

}

If the rows contain commas you could use -

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

you can replace the comma for spaces if they are separated as spaces in your table.

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

If you require your data to be unique you may include the following:

$uniquetags = array_unique($exp, SORT_REGULAR);

you can use print_r to see the results of the array resulting

Here array_merge is used because $rt will not get displayed if you are using a 'jquery' autocomplete else $rt may work and array_merge can be ignored. However, you may use array_merge to include multiple tables by repeating the previous process.

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

This sorts the values in the alphabetic order

sort($autocompletetags, SORT_REGULAR);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文