2011-06-16 90 views
1

我正在構建我的第一個PHP/MySQL站點,並且想從數據庫中的一個表中的兩個字段返回搜索結果 - Catagory和Location(有15個字段總共在表中,但搜索只需要兩個)。PHP/MySQL搜索一個表中的兩個字段

每個選項都有一個下拉菜單,它將在每個字段中列出固定數量的選項 - 例如,可能會有15個左右的位置,以及7個或8個分類。

我希望用戶能夠從一個或兩個下拉菜單中選擇一個項目,單擊「搜索」或「搜索」按鈕,並顯示結果。

如上所述,我是全新的PHP/MySQL,所以如果我的問題有點「簡單」,我希望有人能指引我朝着正確的方向道歉。

感謝 丹

編輯:

布拉德,康納,我沒有什麼迄今爲止我在搜索查詢具體而言畏懼,我剛開始研究如何做到這一點,因此我的問題完全沒有代碼!

但要嘗試更具體,我想要返回結果的唯一字段是位置和作業類別 - 這些是我的表中已經填充了固定字詞的約15個字段的兩個字段 - 例如,位置可能有倫敦,曼徹斯特,利茲和Catagory可能有行政,管理,文書等 - 訪客無法輸入新詞,只能從預先安排的項目的下拉菜單中選擇。

我的表中的其他字段與搜索(薪水,公司,聯繫電子郵件等)無關,所以...我想我只需要兩個查詢,並且結果也可以顯示,如果你只發送一個(例如,你不關心工作的位置,只是專業,你仍然可以找到所有的結果,並決定是否你想搬遷)。這是更好還是更有幫助?

感謝您的幫助。 Dan

+0

丹,問題與你的問題不簡單,但沒有足夠的信息。你能向我們展示你的表格模式和你目前使用的查詢嗎?此外,請閱讀常見問題在這裏:http://stackoverflow.com/faq謝謝。 – Brad 2011-06-16 21:01:13

+0

無論如何,你都想返回所有地點和職位類別?或者你是否有條件的項目,比如獲取位置在德克薩斯州的所有地點和職位類別? – 2011-06-16 21:11:05

+0

對不起,因爲我其實還沒有那麼多細節。編輯上面希望更有幫助。 – Dan 2011-06-16 21:16:45

回答

1

用戶輸入搜索查詢,並且您希望從表中選擇包含或完全匹配該查詢的行嗎?如果是這樣,像

因爲如果category包含$search_query

SELECT category, location 
FROM table 
WHERE concat(' ', category, ' ') LIKE '%$search_query%' 

或者,如果它是一個exact的比賽,你會使用它代替您的條件:

WHERE category = '$search_query' 

我可能偏軌,雖然,你需要指定像布拉德說的

+0

嗨,我會將你的介紹改爲「用戶選擇一個搜索查詢,並且你想選擇表中包含或完全匹配該查詢的行嗎?」謝謝,丹 – Dan 2011-06-16 22:11:42

+0

好吧,我想也許你有一個搜索欄,我不知道一切都是預先填充的。讓我知道如果你需要任何幫助,我會編輯我的答案:) – 2011-06-17 03:04:58

+0

感謝康納,我會玩弄你的建議,並可能會很快爬行回來。再次感謝, – Dan 2011-06-17 19:11:15

0

沒有關於你的表結構和問題中的數據的任何細節基本會有點像:

SELECT ... 
FROM ... 
WHERE (field1 = $location_option) or (field2 = $category_option) 
1

但你需要動態地建立你的sql語句。下面是一段簡單的代碼來演示我的意思。始終保證避免用戶數據來防止sql注入。

if (isset($_POST['go'])){ 
     $location = $_POST['location']; 
     $category = $_POST['category']; 
     $sql = "SELECT * FROM table ID IS NOT NULL "; 

     if ($location !=""){ 
      $sql .= " AND location = " . $location; 
     } 

     if ($category !=""){ 
      $sql .= " AND category = " . $category; 
     } 

} 
+0

您也可以使用'!empty($ location)'和'!empty($ category)' – 2011-06-16 21:20:43

+0

嗨Sid,我不認爲我需要逃避任何事情,因爲用戶沒有機會輸入任何事情,他們只能從兩個下拉列表中的一個或兩個中進行選擇。 – Dan 2011-06-16 21:39:17

+0

如果您傳遞0作爲位置標識或類別標識,則不能使用空函數,因爲空函數將評估爲空。這只是爲了,如果添加其他參數,需要一個0. – 2011-06-16 21:49:34