2013-08-16 153 views
4

我需要從查詢中選擇不同的值,具體取決於WHERE子句的某個部分是否與結果匹配,或者不匹配。雖然我已經明白了需要完成什麼的邏輯,但是我絕對不知道如何以MySQL友好的方式對其進行註釋!根據WHERE選擇不同

考慮以下僞代碼:

SELECT table_name.*, `match_type` 
FROM table_name 
WHERE 
    (
    IF THIS MATCHES: 
    'input' LIKE CONCAT('%', `value`, '%'); 

    THEN 
    `match_type` equals 1 

    ELSEIF THIS MATCHES: 
    `value` LIKE CONCAT('%', 'input', '%') 

    `match_type` equals 0 
    ) 

如果第一場比賽找到任何結果,那麼我就需要用1

的值返回match_type列否則,繼續前進到第二次測試。如果第二個匹配返回任何結果,那麼我需要match_type列代替值爲0.

如果兩者都不匹配,則不應返回任何結果。因此,對於match_type唯一可能的選項應該是1或0


我怎麼會去實現呢?

感謝您的幫助!

回答

1

MySQL的評估TRUE1,所以你可以做這個

SELECT table_name.*, ('input' LIKE CONCAT('%', `value`, '%')) match_type 
    FROM table_name 
WHERE 'input' LIKE CONCAT('%', `value`, '%') 
    OR `value` LIKE CONCAT('%', 'input', '%') 

這裏是SQLFiddle演示

+0

優雅而合乎邏輯。謝謝! – Nathanael

1

使用CASE

SELECT table_name.*, 
    CASE WHEN 'input' LIKE CONCAT('%', `value`, '%') THEN 1 
     ELSE 0 
    END AS match_type 
FROM table_name 
WHERE 'input' LIKE CONCAT('%', `value`, '%') 
OR `value` LIKE CONCAT('%', 'input', '%') 

注意我用WHERE限制結果,其中的任一條件,行,所以我並不需要在CASE再次指定的第二個條件。

+0

雖然這是大多數情況下更加有用,peterm的答案是在這種特殊的情況更好。謝謝! – Nathanael

相關問題