首頁  >  文章  >  後端開發  >  sql多條件查詢

sql多條件查詢

WBOY
WBOY原創
2016-10-17 09:30:081268瀏覽

要實現多條件查詢 其中值為0時為不限條件 怎麼用sql實現

例如:查詢某地區某類型商舖有可能地區為不限類型為中餐查詢時就不需要where 地區=值,而是只有where 類型=中餐,選擇地區為北京類型為中餐查詢時就是where 地區=北京AND 型別=中餐。

接著還有很多其他條件,在後端用if else判斷之後再用不同的sql語句查詢的話太繁瑣了,不太了解sql但我覺得sql應該有相應的解決方案,求教。

回覆內容:

要實現多條件查詢 其中值為0時為不限條件 怎麼用sql實現

例如:查詢某地區某類型商舖有可能地區為不限類型為中餐查詢時就不需要where 地區=值,而是只有where 類型=中餐,選擇地區為北京類型為中餐查詢時就是where 地區=北京AND 型別=中餐。

接著還有很多其他條件,在後端用if else判斷之後再用不同的sql語句查詢的話太繁瑣了,不太了解sql但我覺得sql應該有相應的解決方案,求教。

你可以if判斷了以後在拼入對應的where
ex: $sql = select * from xxx where 1=1;

<code>if(类型!=0){
    $sql .= 'and where 类型 = 中餐';
}</code>

把查詢的條件當作一個Map params; 然後用一個方法進行額外查詢語句的拼接;

<code>public String getWhere(Map<String, Object> params) {
    String str = "";
    
    if(params.size() > 0) {
        boolean and = false;
        for(String param : params.keySet()) {
            Object value = params.get(param);
            if(value == null || value.equals(0)) {
                continue;
            } else {
                if(and) {
                    str = str + " and " + param + " = " + " " + value;
                } else {
                    and = true;
                    str = str + param + " = " + " " + value;
                }
                
            }
        }
    }
    
    if(str != "") { 
        str = " where " + str;
    }
    
    return str;
}</code>

mybatis拼SQL
JPA拼creteria

連結條件 and or

查詢Mysql是使用字串來傳遞Mysql查詢命令的,所以要修改where後面的查詢條件是完全可行的,可以先建立一個儲存這些命令的字串數組,在用戶每次修改條件,例如勾選了地址,就修改數組的相應值,或者在點擊查詢後,檢查界面中那些組件,例如餐類或者地址被勾選了,就獲取他們的值,添加到數組中,然後在開始查詢是遍歷他們,為空的就不做處理,不為空的就加到統一條件字串裡,最後加到查詢語指令字串中就可以啦
string cmd = “select * from 表名where 統一條件”
新手一只,考慮可能不周,不過這中做法應該沒什麼大問題哈

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn