gpt4 book ai didi

sql - MySQL,从一个字符串中查找另一个字符串中的单词

转载 作者:可可西里 更新时间:2023-11-01 08:08:07 26 4
gpt4 key购买 nike

我不知道这是否可以在一个 SQL 语句中完成。我整天都在阅读,似乎找不到解决方案,坦率地说,我的经验只是 SQL 方面的冰山一角。

我有两个不同的表,比方说:商品和客户。两个表都有一个 TEXT 类型的字段 (Notes),其中包含以空格和 CR/LF 对分隔的单词。

我需要选择 customers.note 中的任何单词与 items.note 中的任何单词匹配的所有行 (items.*)

例子:

Table items
ID NOTES
-- ----------
1 bag candle fork
2 max kielland
3 plate knife fork
4 wheel brownbag

Table customers
ID NOTES
-- ----------
1 brown candle fork

我想要的结果是:

Items.ID Items.Note
-------- ----------
1 bag candle fork
3 plate knife fork

我一直在研究 IN 和 LIKE(作为单独的解决方案,而不是作为一对),但它们似乎并没有完全解决问题。如果有任何帮助,我可以确保所有空格都替换为 ','

从长远来看,如果比较可以像 LIKE %..% 那样产生这样的结果,那就更完美了:

Items.ID Items.Note
-------- ----------
1 bag candle fork
3 plate knife fork
4 wheel brownbag

如您所见,棕色在 brownbag 上大受欢迎。

正如我所说,如果不使用一些 PHP 处理将查询拆分为几个问题,我不知道这在 MySQL 中是否可行。

谢谢。


更新

在 OMG Ponies MATCH..AGAINST 建议和一些 PHP 的帮助下,我解决了它。

$SQLSet = mysql_query("
SELECT DISTINCT i.*
FROM items i
JOIN wanted w ON MATCH(i.notes)
AGAINST(\"".$SQLRowWanted['Notes']." +'".$SQLRowWanted['Name']."'\")
");

这是在一个循环内运行的,其中包含来自先前调用的 $SQLRowWanted。通过将名称列封装在“...”中并在其前面添加一个 +,我也获得了更高的全名匹配率。

最佳答案

我会考虑使用全文搜索 (FTS)。 MySQL has native FTS functionality使用 MATCH ... AGAINST 函数,但它要求列上存在全文索引。 MySQL 的全文索引只能应用于 MyISAM 表,用于 CHAR、VARCHAR 或 TEXT 列。

SELECT i.id,
i.notes
FROM ITEMS i
JOIN CUSTOMERS c ON MATCH(i.notes) AGAINST (c.notes IN BOOLEAN MODE)

否则,您需要查看第 3 方 FTS:

  • 狮身人面像
  • Solr(基于 lucene)

关于sql - MySQL,从一个字符串中查找另一个字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com