在mysql列中进行高级搜索,用昏迷分隔一行单词


Advanced search in mysql column with row of words separated by coma

大家好,主题是我正在寻找"LIKE"的替代或高级用法。

我有一列包含一行单词p.e."关键字1,关键字2,another_keyword",当我使用时

$sql = mysql_query("SELECT * FROM table WHERE `column` LIKE '%keyword1%' ");

它很难找到它。这个例子有效,但当我试图找到较短的字符串时,它会出现问题,有时它什么都找不到。

我试着在comas后面放一个空格,这很有帮助,但如果有一种方法可以搜索与该列规范匹配的内容,我会很高兴。

您可以将关键字移动到单个表中。

如果关键字列表没有更改,也可以使用SET字段类型。

存储逗号分隔的单词列表是个坏主意。例如,在您的场景中使用like很难在逗号分隔的列表中找到确切的工作。相反,您可以添加与当前表相关的新表,并将每个单词存储在具有相关标识的新行中,如

table1
id  title
1    test1
2    test2
kewords_table
table1_id word
1         word1
1         word2
1         word3

并且查询将是

select t.*
from table1 t
join kewords_table k
  on(t.id = k.table1_id)
  where k.word = 'your_keyword'

如果你不能改变你的结构,你可以使用find_in_set()

SELECT * FROM table WHERE find_in_set('your_keyword',`column`) > 0

试试这样的东西:

SELECT * FROM tablename
WHERE column LIKE '%keyword1%'
OR    column LIKE '%keyword2%';

有关更多信息,请参阅此处:将SQL LIKE和IN一起使用

MySQL允许您在布尔模式下与布尔运算符一起基于非常复杂的查询执行全文搜索。这就是为什么布尔模式下的全文搜索适合有经验的用户。

首先,您必须将FULLTEXT索引添加到该属性列:

ALTER TABLE table_name ADD search_column TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, ADD FULLTEXT search_column (search_column);

运行以下查询进行搜索:

SELECT * FROM table WHERE MATCH(search_column) AGAINST("keyword1")

有关更多信息,请参阅此处:https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html