我正在編寫一個基於篩選條件從數據庫表中填寫記錄的過程。現在作爲用戶可以應用過濾器或不可以。所以基於這個過濾標準將得到應用。SELECT查詢使用可選的用戶提供的參數篩選記錄
即如果過濾器參數將包含任何值,只有它不會應用條件。
注:我可以通過如果實現吧..別的...條件並執行不同的查詢完全分開,讓我的願望輸出。但是,我想請教的是,有沒有它,而不是是否..任何其他更好的辦法..
例(這裏i_status_id,i_category_id可以包含任何價值或可能不會)
DELIMITER $$
DROP PROCEDURE IF EXISTS `FilterRecord`$$
CREATE PROCEDURE `FilterRecord`(IN i_status_id BIGINT,IN i_category_id BIGINT)
BEGIN
SELECT
Item_backlog.backlog_id AS backlog_id,
Item_backlog.title AS backlog_name,
Item_backlog_Group.title AS group_Name,
Item_backlog.description AS description,
Item_backlog.est_start_date AS estimated_start_date,
Item_backlog.est_end_date AS estimated_end_date,
Item_backlog.actual_start_date AS actual_start_date,
Item_backlog.actual_end_date AS actual_end_date,
Item_backlog.estimated_hours AS estimated_hours,
Item_backlog.actual_hours AS actual_hours,
Item_backlog.status_id AS status_id,
APV_Status.name AS status_name ,
Item_backlog.priority_id AS priority_id,
APV_Priority.name AS priority_name,
Item_backlog.rank AS rank,
Item_backlog.isActive AS isActive,
Item_backlog.created_by_id AS created_by_id,
Item_backlog.created_on AS created_on,
Item_backlog.modified_by_id AS modified_by_id,
Item_backlog.modified_on AS modified_on
FROM
Item_backlog
INNER JOIN
ApplicationParamValue AS APV_Status ON (Item_backlog.status_id=APV_Status.appParamValueId)
INNER JOIN
ApplicationParamValue AS APV_Priority ON (Item_backlog.Priority_Id=APV_Priority.appParamValueId)
INNER JOIN
Item_backlog_group AS Item_backlog_Group ON (Item_backlog.backlog_group_id=Item_backlog_Group.backlog_group_id)
WHERE
Item_backlog.status_id=i_status_id
AND
Item_backlog.category_id=i_category_id
END$$
DELIMITER ;
我已經嘗試過這種方法,它不會工作..作爲OR查找的條件下半年如果上半年是假吧?但即使篩選條件不包含任何值也不會查找您提到的OR部分的後半部分,即無論如何Item_backlog.status_id = i_status_id只返回true –
我不能正確理解您。你可以在一個小表上爲輸入'i_status_id'和'i_category_id'添加一個小的真值表(可能使用我的SqlFiddle)以及期望的結果是什麼?謝謝 – StuartLC
@ChandanPrakashSharma我敢肯定,你接受的答案與我的答案一樣(儘管使用零,而不是默認值),但請注意,在另一個答案中,如果兩個輸入都是默認的,那麼查詢會因爲'WHERE'尾隨而崩潰。 – StuartLC