2015-11-11 62 views
0

我有一個輸入屏幕,可以輸入8個輸入值。輸入值如下sql和multiple where查詢

tCustomerIDStart - tCustomerIDEnd 
tProjectIDStart - tProjectIDEnd 
tDateStart - tDateEnd 
tProjectStatusStart - tProjectStatusEnd 

一旦用戶單擊表單提交,我想對我的SQLite數據庫執行查詢。下面的查詢是我想要的基本輪廓,但是我不太確定如果用戶只輸入一對搜索條件, tDateStart - tDateEnd。我可以通過查詢來省略其他子句嗎?在調用其他子句之前,WHERE語句中的第一個子句總是必須計算爲true。如果所有字段都填充了,我可以構造一個查詢,主要是使用WHERE語法,然後使用AND來構建子句。但是,sql是否可以忽略空對的搜索條件字段?

"SELECT project.start_date, project.projectID, project.project_title, customer.customer, " &\ 
    "project.end_date, project.project_manager, project_status.project_status " &\ 
    "FROM project " &\ 
    "LEFT JOIN customer " &\ 
    "ON project.customerID=customer.customerID " &\ 
    "LEFT JOIN project_status " &\ 
    "ON project.project_statusID=project_status.project_statusID " &\ 
    "WHERE project.projectID BETWEEN " & tProjectIDStart & " AND " & tProjectIDEnd & " " &\ 
    "OR customer.customerID BETWEEN " & tCustomerIDStart & " AND " & tCustomerIDEnd & " " &\ 
    "OR project.project_status_id BETWEEN " & tStatusIDStart & " AND " & tStatusIDEnd & " " &\ 
    "OR project.start_date >= " & tDateStart & " AND " & tDateEnd & " " &\ 
    "ORDER BY date(project.start_date) ASC " 

回答

0

只是建立基於這樣的價值觀是否爲空或空

你的查詢,如果你開始在那裏的東西,總是真的像1=1那麼你只需要申請其他篩選器,並與AND

開始他們都
sql = "SELECT project.start_date, project.projectID, project.project_title, customer.customer, " &\ 
    "project.end_date, project.project_manager, project_status.project_status " &\ 
    "FROM project " &\ 
    "LEFT JOIN customer " &\ 
    "ON project.customerID=customer.customerID " &\ 
    "LEFT JOIN project_status " &\ 
    "ON project.project_statusID=project_status.project_statusID " &\ 
    "WHERE 1=1 " 

if (tProjectIDStart != "" And tProjectIDEnd != "") 
{ 
    sql = sql & " AND project.projectID BETWEEN " & tProjectIDStart & " AND " & tProjectIDEnd & " " 
} 
etc.. 

sql = sql & "ORDER BY date(project.start_date) ASC " 
+0

謝謝 - 這是一個乾淨利落的做法 – JK36