2010-10-01 43 views
0

我将null传递给下面的过程,因为它不返回任何值,即使数据在表中存在吗?在mysql过程中处理空参数 - 不工作

call view_ads(NULL,'vehicles',9);

call view_ads('placename',null,9);

============================================== =======================================

以下是代码

delimiter $$ 
drop procedure view_ads$$ 
create procedure view_ads (place_name varchar(200),category_name varchar(200),pagecount int(8)) 
begin 
declare lowerval int(8); 
declare higherval int(8); 
set lowerval= pagecount-9; 
set higherval=pagecount; 
if isnull(place_name) then 

SET @sql = CONCAT("select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='N' and (category ='",category_name,"' or subcategory='",category_name,"') 
union all 
select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='Y' and (category ='",category_name,"' or subcategory='",category_name,"') 
order by automated asc,posteddate desc 
limit ",lowerval,",",higherval) 
; 
elseif ISNULL(category_name) then 
SET @sql = CONCAT("select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='N' and (state ='",place_name,"' or city='",place_name,"') 
union all 
select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='Y' and (state ='",place_name,"' or city='",place_name,"') 
order by automated asc,posteddate desc 
limit ",lowerval,",",higherval) 
; 
else 
SET @sql = CONCAT("select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='N' and (state ='",place_name,"' or city='",place_name,"') and (category ='",category_name,"' or subcategory='",category_name,"') 
union all 
select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='Y' and (state ='",place_name,"' or city='",place_name,"') and (category ='",category_name,"' or subcategory='",category_name,"') 
order by automated asc,posteddate desc 
limit ",lowerval,",",higherval) 
; 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
end if; 
end$$ 

回答

0

尝试用一个空字符串,像这样的东西来比较:

delimiter $$ 
drop procedure view_ads$$ 
create procedure view_ads (place_name varchar(200),category_name varchar(200),pagecount int(8)) 
begin 
declare lowerval int(8); 
declare higherval int(8); 
set lowerval= pagecount-9; 
set higherval=pagecount; 

if place_name = '' then 
SET @condition = CONCAT("and (category ='",category_name,"' or subcategory='",category_name,"')"); 
else if category_name = '' then 
SET @condition = CONCAT("(state ='",place_name,"' or city='",place_name,"')"); 
else 
SET @condition = CONCAT("(state ='",place_name,"' or city='",place_name,"') and (category ='",category_name,"' or subcategory='",category_name,"')"); 

SET @SQL = CONCAT("select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='N' ",condition," 
union all 
select idads_list,category,subcategory,state,city,title, 
     title_decode,phonenumber,userid,description,DATE_FORMAT(ad_date,'%d-%M-%Y %H:%i:%s') posteddate,automated 
     from ads_list 
where automated='Y' ",condition," 
order by automated asc,posteddate desc 
limit ",lowerval,",",higherval) 
; 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
end if; 
end$$ 

而且我已经修改了一点点你的程序要短。