【发布时间】:2018-07-25 16:27:56
【问题描述】:
我有一个 MySQL 表,我在其中使用逗号分隔值,例如:
user_name books
abc PHP,Java
xyz Net,Shift,PHP
我可以使用 MySQL 的 FIND_IN_SET 函数处理逗号分隔值搜索。
现在书名是自动建议的,意思是如果任何人用关键字“J”搜索,系统应该搜索并匹配单词Java并给出用户“abc”的结果。
我尝试在FIND_IN_SET 中使用like 子句,但它不起作用。
有人有什么建议吗?
【问题讨论】:
-
这篇文章有一个自定义函数,可以通过FIND_IN_SET使用通配符:thenoyes.com/littlenoise/?p=148
-
“我尝试在 FIND_IN_SET 中使用 like 子句,但它不起作用。” - 不知道代码是什么样子或架构,可能需要一段时间才能获得一个(可能的)解决方案。
-
您应该查看关系表,而不是使用逗号分隔值。
-
这样的模式明显违反了Zero, One or Infinity Rule 的database normalization。不要使用逗号分隔的值。一定要使用正确的一对多关系表。 MySQL 可以“处理”这些值,但除了最小的数据集外,其他所有数据集的性能都很糟糕。
-
嗨@FunkFortyNiner 我知道它不是正确的方法,但我没有创建这个模式,这是给我的,我必须让它工作。我知道我可以为书名创建一个新表并从中进行搜索,但如果有可能的话?