2010-07-13 68 views
1

我需要做一個搜索查詢,其中,用戶可通過名稱或課程或一年或成員搜索,上述任何一個,也是用戶凸輪使所有領域的搜索或任意數量的場,例如; - 僅限於名稱&當然。mysql和或查詢

怎麼可能?我不想做出不同的查詢,是否可以用一個查詢?現在我的查詢是:

$query="SELECT * FROM fsb_profile 
    WHERE profile_name = '".$_REQUEST['name']."' 
    AND profile_member= '".$_REQUEST['type']."' 
    AND profile_year= '".$_REQUEST['year']."' 
    AND profile_course='".$_REQUEST['course']."' 
    OR profile_name = '".$_REQUEST['name']."' 
    OR profile_member= '".$_REQUEST['type']."' 
    OR profile_year= '".$_REQUEST['year']."' 
    OR profile_course='".$_REQUEST['course']."'"; 

但它沒有運行,它只是在任何一個字段搜索,它怎麼可能?

+3

您已經一遍又一遍地問同樣的問題,足球愛好者。幫你一個忙,學習一點SQL和布爾代數(當你完成後不要忘記閱讀SQL注入漏洞)。 – Anax 2010-07-13 11:11:15

+0

聽起來像你只是需要使用OR子句過濾三個字段。 你可以發佈一些示例數據和你期望從一個特定的搜索查詢輸出什麼?將幫助我們幫助你:) – 2010-07-13 11:11:55

+1

使用'mysql_real_escape'或者準備好的語句;或者隨時面對[媽媽的攻擊](http://xkcd.com/327/)的 – Amarghosh 2010-07-13 11:30:48

回答

1

只需使用or那麼你的查詢將正常工作。

$query="SELECT * FROM fsb_profile 
    WHERE profile_name = '".$_REQUEST['name']."' 
    OR profile_member= '".$_REQUEST['type']."' 
    OR profile_year= '".$_REQUEST['year']."' 
    OR profile_course='".$_REQUEST['course']."'"; 

未經測試。

11

如果你有或在where子句中混合,然後它用括號來表示組合應該究竟如何來表達有用:(A和B)或C是不一樣的A AND(B OR C)。 SQL將以它自己的方式解釋A和B或C(沒有任何括號),但不一定你可能期望(或打算)解釋它。

例如

WHERE Likes Soccer AND (Likes Pizza OR Likes Whiskey) 

正在尋找一個喜歡足球,喜歡比薩或威士忌的人;所以它會挑誰喜歡比薩,足球愛好者誰喜歡誰都喜歡比薩餅和威士忌

威士忌,足球愛好者
WHERE (Likes Soccer AND Likes Pizza) OR Likes Whiskey 

正在尋找誰都喜歡足球和比薩餅,或一個人一個人的足球愛好者誰喜歡威士忌;所以它會選擇足球愛好者誰也必須像披薩,或者威士忌愛好者,或者誰應該也喜歡比薩,但也喜歡威士忌