mySQL LIKE 管道查询

mySQL LIKE Query on pipe

我正在尝试计算 pics_indiapics_other 在 mysql 使用 LIKE 运算符。

我有一个关键字管道 (pics_india,pics_other,pics_other_france) 即

pics_other_france  
pics_other  
pics_other|pics_other_france|pics_other|pics_other_france
pics_other_france|pics_other_france  
pics_other_france|pics_india|pics_india|pics_other_france|pics_india

我的查询如下:

if(medmas.mf_mm_keywords LIKE '%pics_india%','1','0')AS Pics_Ind,
if(medmas.mf_mm_keywords LIKE '%|pics_other' OR 'pics_other|%' OR '%pics_other%' OR '%|pics_other_france' OR 'pics_other_france|%' OR '%pics_other_france%','1','0')AS Pics_Other

如果pics_other_france|pics_india或|pics_india|pics_other_france的话,我要记分到pics_india而已,另外pics_other数也是错误的。

解决您的问题的最佳方法是规范化您的 table(而不是将列表存储在单个字段中,您应该存储多行)。如果你不能改变你的数据库结构,你可以使用 FIND_IN_SET 函数。

首先你必须更换 |用逗号,你可以使用 REPLACE 函数,然后你可以调用 FIND_IN_SET:

FIND_IN_SET('pics_india', REPLACE(mf_mm_keywords, '|', ','))

你的查询可能是这样的:

SELECT
  if(FIND_IN_SET('pics_india', REPLACE(medmas.mf_mm_keywords,'|',','))>0, '1', '0') AS Pics_Ind,
  if(
    (FIND_IN_SET('pics_other', REPLACE(medmas.mf_mm_keywords,'|',','))>0
     OR
     FIND_IN_SET('pics_france', REPLACE(medmas.mf_mm_keywords,'|',','))>0),
    '1', '0') AS Pics_Ind,
FROM ...
WHERE ...