2013-12-08 59 views
1

我想創建一個查詢,將通過3列篩選列表中的任何值:從表中選擇其中列=

age = "2"; 
gender = "male"; 
race = "pitbull"; 

MySqlCommand tempCommand = _DbHandler.CreateCommand("SELECT * FROM dogs WHERE age = @age AND gender = @gender AND race = @race"); 
tempCommand.Parameters.AddWithValue("@age", age); 
tempCommand.Parameters.AddWithValue("@gender", gender); 
tempCommand.Parameters.AddWithValue("@race", race); 

MySqlDataReader tempReader = tempCommand.ExecuteReader(); 

而且我希望能夠做出讓說,性別欄回暖任何值,如果這個工作: gender =「*」;

如何在一個查詢中實現此目的?

年齡,性別和種族都是真實代碼中的參數。

+1

'「*」'也是'string'。如果你的'gender'是''*「',你的查詢就像你說的那樣工作。我覺得我完全不明白你的問題。 –

+0

With gender =「*」我的意思是「性別列中的任何值」。 – jt123

回答

0

我能想出的最快捷方式是這樣的,在這裏你只需要更改SQL ststement。現在,我只希望dogs沒有一百萬行......

MySqlCommand tempCommand = _DbHandler.CreateCommand(
      @"SELECT * 
      FROM dogs 
      WHERE (@age='*' OR age = @age) 
      AND (@GENDER='*' OR gender= @gender) 
      AND (@race='* OR race = @race"); 

我想在這裏你提供任何參數*表示「沒有給定值」,所以設置

age="*";

如果你不想根據他們的年齡選擇狗。

+0

很好,它的工作正如我想要的,非常感謝<3 – jt123

1

要捕獲任何值,您只需不要將該參數添加到查詢中,也不要將條件添加到sql中。

像這樣的東西應該工作:

String sql = "SELECT * FROM dogs"; 

if (age != "*" || gender != "*" || race != "*") 
    sql += " WHERE 1=1"; 

if (age != "*") sql += " AND age = @age"; 
if (gender != "*") sql += " AND gender = @gender"; 
if (race != "*") sql += " AND race = @race"; 

MySqlCommand tempCommand = _DbHandler.CreateCommand(sql); 

if (age != "*") tempCommand.Parameters.AddWithValue("@age", age); 
if (gender != "*") tempCommand.Parameters.AddWithValue("@gender", gender); 
if (race != "*") tempCommand.Parameters.AddWithValue("@race", race); 
+0

你說得對,我沒有閱讀完整的sql。我會在我的回答中進行一些更改 – Keeper

+0

'age','gender'和'race'是'strings',而不是'char'。 –

+0

是的,我的錯:我對C#有點生疏,這個問題可能是語言不可知的,所以我錯誤地鍵入字符/字符串比較 – Keeper