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//
4

1 回答 1

0

您可以使用OUT参数和 SQL_CALC_FOUND_ROWS <--> FOUND_ROWS() 组合。你可以在这里阅读更多关于它的信息。

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获得行数。如果您不需要显示查询结果,那么问题是,您是否需要存储过程。

于 2013-02-21T11:07:38.403 回答