2015-04-22 24 views
0

我有沒有工作的MySql如果在where子句中

SELECT DISTINCT CONCAT(u.firstname, ' ', u.lastname) AS fnameLname, s.student_number, u.user_id 
FROM user u 
LEFT OUTER JOIN student s ON u.user_id = s.user_id 
WHERE 
case when @filter != '' 
then ((u.firstname REGEXP CONCAT('^[', @filter, ']') OR u.lastname REGEXP CONCAT('^[', @filter, ']')) OR student_number REGEXP CONCAT('^[', @filter, ']')) 
else 1=1 
AND (u.user_type_id = 0) 
ORDER BY u.lastname, u.firstname 

我要選擇從表用戶,我已經實現搜索字段(在student_number或姓的開始搜索用戶代碼語句和姓氏(只是名字或姓氏的第一個字母))。

例如,如果我搜索「j s」,它將匹配例如John Smith,而不是John Moses。它也將匹配傑里米薩索。 @filter是asp.net中的控制參數。

任何人都可以幫助我嗎?

+0

說明您搜索縮寫或前綴 – Franky

+2

不確定爲什麼要嘗試使用CASE語句。看起來你可能只是或幾個WHERE子句在一起。 – Kickstart

回答

1

您可以使用andor。無需複雜的case when s和內case when S,等:

where ((@filter != '%' 
      and (u.firstname REGEXP CONCAT('^[', @filter, ']') 
       or u.lastname REGEXP CONCAT('^[', @filter, ']') 
       or student_number REGEXP CONCAT('^[', @filter, ']') 
      ) 
     ) 
     or @filter = '%' 
    ) 
and u.user_type_id = 0 

爲@filter的默認值是「%」 - 一個空字符串這是一個語法錯誤,因爲空方括號。

+0

我不知道,但如果我用任何字符串(空或非空)替換@filter,它不起作用。它也不適用於asp.net。 – thecoparyew

+0

您是否使用如本例中的雙等號或單個等號?當它不起作用時,它會發生錯誤還是不能帶回任何東西? – Kickstart

+0

我複製了上面的代碼。在HeidiSQL中,它給出了一個錯誤,在asp.net中,當我想填充gridview時,它不會帶回任何東西。 – thecoparyew