MySQL의 결과 집합 반복
이 문서에서는 데이터베이스 프로그래밍의 기본 작업인 MySQL의 결과 집합 반복 개념을 살펴봅니다. 우리는 다음 PHP 코드의 기능을 에뮬레이트하는 것을 목표로 합니다.
$result = mysql_query("SELECT something FROM somewhere WHERE some stuff"); while ($row = mysql_fetch_assoc($result)) { // check values of certain fields, decide to perform more queries, or not // tack it all into the returning result set }
커서 기반 접근 방식
MySQL은 결과 집합을 반복하기 위한 커서를 제공합니다. 그러나 트리거 구현을 위한 FOR EACH ROW 구문과 같은 기능이 부족합니다. 그럼에도 불구하고 다음 접근 방식을 사용하여 커서 기반 루프를 생성할 수 있습니다.
SET @S = 1; LOOP SELECT * FROM somewhere WHERE some_conditions LIMIT @S, 1 -- IF NO RESULTS THEN LEAVE -- DO SOMETHING SET @S = @S + 1; END LOOP
Stored Procedure with Cursor
이를 구현하는 보다 구조화된 방법 논리는 커서를 사용하는 저장 프로시저를 통해 이루어집니다. 예는 다음과 같습니다.
CREATE PROCEDURE GetFilteredData() BEGIN DECLARE bDone INT; DECLARE var1 CHAR(16); -- or approriate type DECLARE var2 INT; DECLARE var3 VARCHAR(50); DECLARE curs CURSOR FOR SELECT something FROM somewhere WHERE some stuff; DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; DROP TEMPORARY TABLE IF EXISTS tblResults; CREATE TEMPORARY TABLE IF NOT EXISTS tblResults ( --Fld1 type, --Fld2 type, --... ); OPEN curs; SET bDone = 0; REPEAT FETCH curs INTO var1, var2, var3; IF whatever_filtering_desired -- here for whatever_transformation_may_be_desired INSERT INTO tblResults VALUES (var1, var2, var3); END IF; UNTIL bDone END REPEAT; CLOSE curs; SELECT * FROM tblResults; END
고려 사항
커서는 복잡한 비즈니스 규칙을 구현하는 데 유용할 수 있지만 몇 가지 단점이 있습니다. 따라서 단일 선언적 SQL 쿼리에서 원하는 변환 및 필터를 표현하는 등의 대체 방법을 고려하는 것이 좋습니다.
위 내용은 MySQL에서 결과 세트를 어떻게 반복할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!