Mysql動態多條件查詢

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   sp   on   資料   

動態多條件查詢是一類經常遇到的問題。

在Mysql裡面可以用語句簡單的解決。

SELECT * FROM product WHERE price = IF(‘{0}‘ = ‘‘, price, ‘{0}‘) AND name LIKE IF(‘{1}‘ = ‘‘, name, ‘%{1}%‘) 這裡的price和name分別為產品表中的兩個欄位名,{}標誌位是我們要將參數替換進去的地方,這樣在查詢頁面只需調用SQL模板語句,並替換相應的參數即可。(假設使用者沒有過濾價格,則{0}為空白,那麼得到的SQL語句類似於:SELECT * FROM product WHERE price = price AND name LIKE ‘p‘,其中price = price就起到了不進行過濾的作用,這樣就達到了動態產生多條件查詢語句的目的,頁面中也就不需要進行繁瑣的組合SQL語句的工作了)。

 

下面給出執行個體代碼:

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `pc_select_tb_position_01`(in `in_cardid` int,in `in_bs_id` int,in `in_posi_date1` int,in `in_posi_date2` int)BEGINSELECT `tb_position`.`cardid`,`tb_position`.`bs_id`,`tb_position`.`distance`,`tb_position`.`posi_date`,`tb_position`.`msecond`FROM `db_pps_test1`.`tb_position`where `tb_position`.`cardid` = if(`in_cardid`is null,`tb_position`.`cardid`,`in_cardid`)and `tb_position`.`bs_id` = if(`in_bs_id`is null,`tb_position`.`bs_id`,`in_bs_id`)and `tb_position`.`posi_date` >= if(`in_posi_date1`is null,`tb_position`.`posi_date`,`in_posi_date1`)and `tb_position`.`posi_date` <= if(`in_posi_date2`is null,`tb_position`.`posi_date`,`in_posi_date2`);END$$DELIMITER ;

我這裡設定的是輸入的值是null值就忽略此欄位。

所以調用的時候就是這樣:

CALL `db_pps_test1`.`pc_select_tb_position_01`(1,null, 2,6);

或者

CALL `db_pps_test1`.`pc_select_tb_position_01`(1,null, 2,null);

或者

CALL `db_pps_test1`.`pc_select_tb_position_01`(null,3,null,6);

等等

但是這樣就會有一個問題。就是當我四個參數都是null 的時候。就會執行搜尋全表的資料。所以要在應用程式層避免這種情況。

Mysql動態多條件查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.