현재 위치: > 최신 기사 목록> mysqli_result :: data_seek를 사용하여 결과 세트를 역전시키고 mysql 쿼리의 역 차수 트래버스를 구현하십시오.

mysqli_result :: data_seek를 사용하여 결과 세트를 역전시키고 mysql 쿼리의 역 차수 트래버스를 구현하십시오.

gitbox 2025-09-17

매일 개발에서는 종종 MySQL 데이터베이스에서 결과 세트를 얻고 결과 세트를 통과해야합니다. 기본적으로 MySQLI_Query 가 반환 한 결과 세트는 쿼리 순서로 저장됩니다. 결과 세트를 원한다면 몇 가지 방법이 있습니다. 간단하고 효율적인 방법 중 하나는 PHP의 mysqli_result :: data_seek 함수를 사용하는 것입니다.

mysqli_result :: data_seek 란 무엇입니까?

mysqli_result :: data_seek는 PHP가 제공하는 메소드로, 개발자가 결과 세트의 내부 포인터를 지정된 행으로 이동할 수있는 방법입니다. 기본 사용량은 다음과 같습니다.

 <span><span>mysqli_result::</span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ 오프셋은 0 부터 시작하는 대상 행의 인덱스를 나타냅니다.

  • 반환 값은 부울 유형입니다. True 가 성공적으로 반환되면 False 가 실패하면 False가 반환됩니다.

시나리오를 사용하십시오

결과 세트를 역순으로 통과하려면 가장 직접적인 방법은 SQL 쿼리의 DESC로 주문을 사용하지 않고 결과 세트의 마지막 행에서 앞으로 읽는 것입니다. 이렇게하면 특히 데이터 볼륨이 매우 큰 경우 경우 데이터베이스의 압력을 줄일 수 있습니다.

샘플 코드

필드 ID이름이 포함 된 MySQL 테이블 사용자가 있다고 가정하고 사용자 목록을 역 순서로 출력하려고합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
    </span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;num_rows;

    </span><span><span class="hljs-comment">// 역 순서 트래버스 결과 세트</span></span><span>
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-variable">$num_rows</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &gt;= </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>--) {
        </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>); </span><span><span class="hljs-comment">// 내부 포인터를 $i 좋아요</span></span><span>
        </span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>();
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">", Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }

    </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"쿼리가 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
}

</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

작동 원리

  1. $ result-> num_rows 결과 세트의 총 행 수를 얻습니다.

  2. for 루프는 마지막 줄 $ num_rows -1 에서 시작하여 단계별로 전진합니다.

  3. 지정된 행을 찾으려면 $ result-> data_seek ($ i) 를 사용하십시오.

  4. 현재 행 데이터를 얻으려면 $ result-> fetch_assoc ()을 호출하십시오.

이 방법은 SQL 쿼리 순서를 수정할 필요가 없으며 트래버스 순서를 동적으로 제어하는 ​​일부 시나리오에서는 매우 유용합니다.

장점과 예방 조치

이점 :

  • 간단하고 사용하기 쉬우 며 PHP 수준에서 트래버스 순서를 직접 제어하십시오.

  • 작은 결과 세트에 매우 효율적입니다.

참고 :

  • 대규모 결과 세트의 경우 메모리 소비가 너무 높으면 SQL 레이어를 정렬하기 위해 주문을 사용하는 것이 좋습니다.

  • data_seek는 mysqli_query 가 반환 한 mysqli_result 객체에만 적용되며 쿼리가 아닌 쿼리가 아닙니다.

요약

mysqli_result :: data_seek를 사용하면 SQL의 분류 기능에 의존하지 않고 결과 세트의 역 순서 트래버살을 쉽게 구현할 수 있습니다. PHP 개발자에게보다 유연한 제어 방법을 제공합니다. 특히 쿼리 결과가 동적으로 처리되는 시나리오에 적합합니다.