mySQL LIKE 管道查询
mySQL LIKE Query on pipe
我正在尝试计算 pics_india 和 pics_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 ...
我正在尝试计算 pics_india 和 pics_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 ...