Присвоение каждому утверждению Like значения, возвращаемого при сопоставлении - PullRequest
0 голосов
/ 31 июля 2011

У меня есть строковый массив, состоящий из слов (например, {alpha, beta, gamma}) и таблицы MySQL, заполненной словами. Для каждого строкового массива я придумываю инструкцию SELECT, которая запрашивает таблицу MySQL, чтобы узнать, есть ли совпадения слов. Возвращаемые строки дают мне знать, когда слово в моем массиве строк является одним из уникальных в таблице. Затем я изменяю текст конкретной строки в массиве строк. Для простоты давайте предположим, что я хочу вызвать .ToUpper () для него.

Мой текущий метод состоит в том, чтобы получить все строки из таблицы, которые соответствуют, а затем перебрать массив строк и проверить, соответствует ли каждая возвращенная строка каждой отдельной строке в массиве. Это невероятно неэффективно, и я бы предпочел, чтобы в строках, возвращаемых из моего запроса MySQL, был столбец, в котором указывалось бы, с какой позиции в массиве строк произошло это слово. Таким образом, я могу прыгнуть прямо туда и повозиться со струной. Есть ли способ дать каждому предложению "LIKE" в операторе where уникальный идентификатор, который возвращается, если это конкретное предложение 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 голосов
/ 31 июля 2011
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
...