【问题标题】:How to match comma separated string against comma separated MySQL field如何将逗号分隔的字符串与逗号分隔的 MySQL 字段匹配
【发布时间】:2018-07-27 08:25:57
【问题描述】:

我正在尝试将逗号分隔的字符串与逗号分隔的 MySQL 字段进行匹配。这应该匹配另外一个逗号分隔的文本。

例子

字符串 = apple, pineapple, grapes

MySQL 字段 = mango, oranges, apple

我尝试了MySQL IN,但它仅在字符串与 MySQL 字段完全匹配或字符串中只有一项时才有效

SELECT * FROM table1 WHERE field_1 IN (‘string’)

还尝试了FIND_IN_SET,但没有任何运气。谁能告诉我如何实现这一目标?感谢你的帮助。

【问题讨论】:

  • 您的表中有逗号分隔的字符串?那么您根本不应该对其单独的值感兴趣。如果您对单独的值感兴趣,请更改您的数据模型并单独存储这些值。
  • 我认为选项很简单;要么规范化你的架构,要么不用 RDBMS
  • @Strawberry 我想我会去规范化模式。谢谢。
  • @max 你应该把这个表变成更正常的形式,或者将该字段声明为 json 字段并存储 josn。 Mysql有强大的功能来玩json字段

标签: mysql


【解决方案1】:

为了达到上述结果匹配记录,执行以下脚本

创建临时表,输入字符串为行,以 分隔

drop temporary table if exists temp;
create temporary table temp( val varchar(255) COLLATE utf8_unicode_ci )
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
set @sql = concat("insert into temp (val) values ('", replace(( select 
group_concat(distinct ('mango,oranges,apple')) as data ), ",", "'),('"),"');");
prepare stmt1 from @sql;
execute stmt1;

将临时表与主表连接

select *
from
(
     select distinct(val) as a from temp
)as splited
inner join 
(
    select 'apple, pineapple, grapes' as field
 )as table1
 where table1.field like concat('%',splited.a,'%');

【讨论】:

  • 只需运行此查询,您就会知道是否适合您的要求。 @max
  • @max 如果您发现此答案有帮助,请接受。谢谢
  • 刚刚做了。非常感谢。
【解决方案2】:

我认为this answer 可能会帮助您。只需将单元格值和查询值转换为数组,然后检查它们是否有匹配的值。

【讨论】:

    【解决方案3】:

    我觉得你的问题是错误的。 你提到的

    MySQL field = mango, oranges, apple
    

    你的查询是

    SELECT * FROM table1 WHERE field_1 IN (‘string’)
    

    确定是字段名还是字段值

    【讨论】:

    • 他们是正确的。这只是我尝试过的查询的一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2013-05-20
    相关资源
    最近更新 更多