【问题标题】:How to use MySQL LIKE in comma separated values如何在逗号分隔值中使用 MySQL LIKE
【发布时间】:2015-06-18 09:33:16
【问题描述】:

我有一个简单的表名locations,有 3 个字段

ID      |   location    |   sub_location
------------------------------------------
1       |   loc1        |   sub1,another,sub3
2       |   loc2        |   test1,test

如何根据用户输入从locationsub_location 获取匹配值? 简单来说,用户将在文本框中输入几个字母。我必须检查locationsub_location 中是否有任何匹配值。但问题是我在sub_location 列中有逗号分隔值。每个逗号分隔的单词应被视为不同的值,结果应为单个值。 想象一下用户输入“sub”作为搜索词,那么我的查询是这样的。但它不起作用,并在 WHERE 子句附近引发查询错误。有什么想法吗?

SELECT ID, location, sub_location FROM locations WHERE location LIKE %sub% OR WHERE sub_location LIKE %sub%

【问题讨论】:

    标签: mysql where-clause sql-like


    【解决方案1】:
    SELECT ID, location, sub_location 
    FROM locations 
    WHERE location LIKE'%sub%' 
      OR sub_location LIKE '%sub%'
    

    如果没有第二个 Where 子句,只需添加 OR

    【讨论】:

    • MySQL 错误。 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%sub% OR sub_location LIKE %sub% LIMIT 0, 30' 附近使用正确的语法
    • 我猜你应该写... like '%sub%' ...,在字符串两边加上单引号
    • 缺少single quote
    • 是的,对不起,我刚刚从问题中复制了选择
    • 谢谢。这解决了主要问题。但是还有什么方法可以从逗号分隔的值中获取单个匹配字符串而不是整个值?
    【解决方案2】:

    select * from locations where (location = input) or
    (sub_location like concat('%',input, ',%') or
    sub_location like concat('%,',input, ',%') or
    sub_location like concat('%,',input, '%') or
    sub_location like concat('%',input, '%') )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2023-03-18
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多