2012-03-24 101 views
1

一直在尋找這個,但不能找到一個答案,所以想我會問在這裏。PHP MySQL下拉列表搜索

我有5個下拉選項框列表,其數據從數據庫填充。數據庫信息是關於用戶從第一下拉列表中選擇計算機制造商,計算機類型從第二下拉列表中選擇,計算機顏色從第三下載,最後從第四和第五下拉列表中選擇最小和最高價格。

這些用戶選擇的變量然後發佈到php的「搜索」頁面,並對它們運行查詢。我的問題是,如果(例如)用戶只選擇了一臺計算機的「製造」和「製造」並將所有其他選項框留空,我將如何在SQL搜索中運行這個選項?我是否需要設置'未設置'變量作爲通配符?

任何幫助,將不勝感激!

+0

不要忘記來發表您的樣品。你需要發佈它。 – Lion 2012-03-24 21:55:09

+0

您在回答問題後不會刪除您的問題。你把它留給子孫後代,以便其他人也能受益。 – 2012-03-25 20:08:40

回答

2

您可以動態建立查詢,像這樣:

$sql = "SELECT ... FROM ... WHERE 1=1 "; 
if ($manufacturer != "") { 
    $sql .= " AND manufacturer = ..."; 
} 
if ($computerType != "") { 
    $sql .= " AND computerType = ..."; 
} 
// etc... 
+0

嗨馬克,非常感謝。只是在我的頁面上添加了一些分頁的一個問題,是我把這個添加到查詢結尾的簡單情況嗎?即:if($ computerType!=「」){sql。=「AND computerType = ...」; }「LIMIT $ startRecord,$ noOfRecords」; – Touy 2012-03-24 23:44:08

+0

@Tuoy:您必須具有ORDER BY,否則當您移至下一頁時,結果可能會以不同的順序出現。還有一些其他的事情要注意,但是這個評論框太小而不能進入這些細節。我建議你搜索關於如何在MySQL中實現分頁的教程。 – 2012-03-24 23:57:44

+0

好的,馬克謝謝你。我有一種工作分頁腳本,你能否確認「LIMIT $ startRecord,$ noOfRecords」已包含在查詢中?許多很多再次感謝 – Touy 2012-03-25 00:17:43

1
SELECT * FROM TABLE WHERE 
COLUMN_NAME_1 = IF('".$select_result_1."'='',COLUMN_NAME_1,'".$select_result_1"') AND 
COLUMN_NAME_2 = IF('".$select_result_2."'='',COLUMN_NAME_2,'".$select_result_2"') AND 
COLUMN_NAME_3 = IF('".$select_result_3."'='',COLUMN_NAME_3,'".$select_result_3"') AND 
COLUMN_NAME_4 = IF('".$select_result_4."'='',COLUMN_NAME_4,'".$select_result_4"') AND 
COLUMN_NAME_5 = IF('".$select_result_5."'='',COLUMN_NAME_5,'".$select_result_5"');