2011-07-31 60 views
0

我有一個由單詞(例如{alpha,beta,gamma})和一個填充了單詞的MySQL表組成的字符串數組。對於每個字符串數組,我想出了一個SELECT語句來查詢MySQL表,以查看是否有任何字匹配。返回的行讓我知道,當我的字符串數組中的單詞是表中唯一的單詞時。然後我改變字符串數組中特定字符串的文本。爲了簡單起見,我們假設我想調用一個.ToUpper()。指定每個類似語句在匹配時返回的值

我現在的方法是從表中匹配所有行,然後遍歷字符串數組,並檢查每個返回的單行是否匹配數組中的每一個字符串。這非常低效,我寧願讓我的MySQL查詢返回的行有一列告訴我字符串數組中哪個位置來自哪個字。這樣,我可以跳到那裏,並與字符串混合在一起。有沒有辦法給where語句中的每個「LIKE」子句一個唯一的標識符,如果該特定的類似子句是匹配的則返回該標識符?任何想法將不勝感激。

我的SELECT語句:

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 ()並知道這是匹配的單詞。

非常感謝!

回答

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 
+0

感謝 - 這似乎是正確的路要走,但如果我搜索單詞「alpha」兩次並給它兩個鍵(因爲它在我的單詞數組中出現兩次),它只會出現一次在結果中。有什麼建議麼? – carlbenson

+0

我建議你在你的應用程序中處理多個匹配情況,而不是在MySql中。首先從列表中刪除重複項,進行查詢,當結果返回時再次檢查原始列表以查看結果列表中是否有多個元素。 – nobody

相關問題