【问题标题】:FIND_IN_SET with like clause mysql带有like子句mysql的FIND_IN_SET
【发布时间】: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 我知道它不是正确的方法,但我没有创建这个模式,这是给我的,我必须让它工作。我知道我可以为书名创建一个新表并从中进行搜索,但如果有可能的话?

标签: php mysql


【解决方案1】:

不是一个干净的解决方案,但你可以使用这样的东西:

SELECT * FROM `library` WHERE `books` LIKE 'J%' OR `books` LIKE '%,J%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2013-07-12
    • 2021-11-27
    相关资源
    最近更新 更多