2013-02-21 23 views
0

该过程是否正常工作。我需要的是对排序的结果进行排序。如何计算存储过程的结果

DROP PROCEDURE `tradematch`// 
CREATE DEFINER=`root`@`localhost` PROCEDURE `tradematch`(IN `pid` INT) 
BEGIN 
SELECT p.company_name,p.company_info,pc.contact_address,pc.mobilenumber,p.idprofile,b.businesstype 
FROM profile p,profile_contact pc,businesstypelkp b 
WHERE p.idprofile=pc.idprofile_contact 
AND p.business_type=b.idbusinessTypeLKP 
AND p.idprofile not in (SELECT p.idprofile FROM profile p WHERE FIND_IN_SET(idprofile,(select Group_Concat(member_list) as group_members from groupmemberlkp where profile_id=pid))) AND FIND_IN_SET(idprofile,(SELECT group_concat(p.profileid) from products_profile p where FIND_IN_SET(product_id,(SELECT group_concat(product_id) FROM `rawmaterial_profile` WHERE profileid=pid))AND p.profileid!=pid)); 
END// 

回答

0

您可以使用OUT参数和SQL_CALC_FOUND_ROWS < - > FOUND_ROWS()的组合。你可以阅读更多关于它here。当您执行查询

DROP PROCEDURE `tradematch`// 
CREATE DEFINER=`root`@`localhost` PROCEDURE `tradematch`(IN `pid` INT, OUT result INT) 
BEGIN 
SELECT SQL_CALC_FOUND_ROWS p.company_name,p.company_info,pc.contact_address,pc.mobilenumber,p.idprofile,b.businesstype 
FROM profile p,profile_contact pc,businesstypelkp b 
WHERE p.idprofile=pc.idprofile_contact 
AND p.business_type=b.idbusinessTypeLKP 
AND p.idprofile not in (SELECT p.idprofile FROM profile p WHERE FIND_IN_SET(idprofile,(select Group_Concat(member_list) as group_members from groupmemberlkp where profile_id=pid))) AND FIND_IN_SET(idprofile,(SELECT group_concat(p.profileid) from products_profile p where FIND_IN_SET(product_id,(SELECT group_concat(product_id) FROM `rawmaterial_profile` WHERE profileid=pid))AND p.profileid!=pid)); 

SET result:=FOUND_ROWS(); 

END// 

然后:

CALL yourProcedure(yourId, @whatever); 
SELECT @whatever; 

这样的程序显示结果,并与第二SELECT你得到的行数。如果你不需要显示查询结果,问题是,如果你需要存储过程的话。