2017-07-10 80 views
0

我想查詢數據庫取決於用戶的搜索條件,其中一個標準是註冊性別:男性或女性。Php:與CASE和多選擇sql查詢

但是,用戶可以發送作爲條件malefemaleanything。我試圖在用戶發送anything時選擇所有行,但我得到空結果。

下面是我的一些實驗中,他們都不似乎工作,但它的malefemale

$query = "SELECT * 
      FROM UsersInfo 
      WHERE gender = CASE '$et_gender' 
       WHEN 'male' THEN 'male' 
       WHEN 'female' THEN 'female' 
       WHEN 'anything' THEN 'female' AND 'male' 
          END"; 


$query = "SELECT * 
      FROM UsersInfo 
      WHERE gender = CASE '$et_gender' 
       WHEN 'male' THEN 'male' 
       WHEN 'female' THEN 'female' 
       WHEN 'anything' THEN SELECT * FROM UsersInfo 
          END"; 


$query = "SELECT * 
       FROM UsersInfo 
       WHERE gender = CASE '$et_gender' 
        WHEN 'male' THEN 'male' 
        WHEN 'female' THEN 'female' 
        WHEN 'anything' THEN * 
           END"; 
+0

在WHERE子句中使用AND/OR來代替case表達式通常要好得多。 – jarlh

+0

@jarlh謝謝...我不是很熟練的sql ...所以CASE聽起來像我所需要的...但是,也許你是對的 – codeKiller

+0

嘗試打印你的查詢到屏幕上,看看它的樣子。 –

回答

1

你可以嘗試:

$query = "SELECT * 
    FROM UsersInfo 
    WHERE (gender = '$et_gender' AND '$et_gender' IN ('male', 'female')) OR ('$et_gender'='anything')" 

根據我假設值,你可以簡寫太(但做一些檢查) :

$query = "SELECT * 
     FROM UsersInfo 
     WHERE (gender = '$et_gender') OR ('$et_gender'='anything')" 
+0

謝謝,它看起來不錯,我不是很熟練的SQL,但我會嘗試它 – codeKiller

1

的情況下,我看到的是,你不需要提及任何過濾器工作正常在所有和您的查詢條件可能只是

SELECT * FROM UsersInfo 

(OR)使用IN運營商像

WHERE gender IN ('male','female','anything') 
按您的發佈代碼3210

(OR)使用等於運算符=

WHERE gender = '$et_gender' 
+0

no man ...例如,如果用戶在條件中發送'male',我應該從表中得到MALE用戶......對於'女性'也是如此......並且它們全部用於'任何' – codeKiller

+0

@eddie,參見編輯答案如果幫助 – Rahul