为每个like语句分配匹配时返回的值

时间:2011-07-31 16:46:25

标签: mysql sql if-statement where-clause string-matching

我有一个由单词组成的字符串数组(例如{alpha,beta,gamma})和一个充满单词的MySQL表。对于每个字符串数组,我想出了一个SELECT语句,它查询MySQL表以查看是否有任何匹配的单词。返回的行让我知道我的字符串数组中的单词是表中唯一的单词之一。然后我改变字符串数组中特定字符串的文本。为简单起见,我们假设我想在其上调用.ToUpper()。

我当前的方法是从表中获取匹配的所有行,然后遍历字符串数组并检查返回的每一行是否匹配数组中的每个字符串。这是非常低效的,我宁愿让从我的MySQL查询返回的行有一个列,告诉我字符串数组中哪个字来自哪个位置。这样我就可以跳到那里并用绳子捣乱。有没有办法给where语句中的每个“LIKE”子句一个唯一的标识符,如果该特定的like子句是匹配的那个,则返回该标识符?任何想法都会非常感激。

我的选择声明是:

SELECT `WordText` FROM `Words` WHERE `WordText` LIKE 'alpha%' OR `WordText` LIKE 'gamma%';

我正在寻找的是这样的:

SELECT `WordText`, PositionInArray FROM `Words` WHERE `WordText` LIKE 'alpha%' (IF MATCH THEN PositionInArray=0 -- alpha's position in my array) OR  `WordText` LIKE 'gamma%' (IF MATCH THEN PositionInArray=2 - gamma's position in my array);

当返回这一行时,我可以直接进入WordArray [PositionInArray] .ToUpper()并知道那是匹配的单词。

非常感谢!

1 个答案:

答案 0 :(得分:0)

SELECT CASE WHEN WordText LIKE 'alpha%' THEN 0 WHEN WordText LIKE 'beta%' THEN 1
WHEN 'gamma%' THEN 2 ELSE -1 END AS match FROM Words WHERE match <> -1