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;

このようにして、プロシージャは結果を表示し、2 番目SELECTに行数を取得します。クエリの結果を表示する必要がない場合、問題はストアド プロシージャが必要かどうかです。

于 2013-02-21T11:07:38.403 に答える