[mySQL] 특정 레코드가 몇 번째인지 알아내는 방법


[mySQL] 특정 레코드가 몇 번째인지 알아내는 방법




최초 작성일 : 2023-09-07 | 수정일 : 2023-09-10 | 조회수 : 660

MySQL의 테이블에 저장된 특정 레코드가 몇 번째인지 알기 위해서는 일반적으로 순위를 반환하는 SQL 쿼리를 사용한다.
이는 ROW_NUMBER() 함수를 활용해 가능하며, WHERE 절과 함께 사용하면 특정 레코드의 순위를 알 수 있다.

예를 들어, users라는 테이블에서 id 컬럼이 5인 사용자의 순위를 조회하고 싶다면, 다음과 같은 SQL 쿼리를 사용할 수 있다.

sql
SELECT row_num
   FROM (
      SELECT id, ROW_NUMBER() OVER (ORDER BY some_column) as row_num FROM users
   ) 
AS temp
   WHERE id = 5;

위의 쿼리에서 some_column은 순위를 결정하는 데 사용되는 컬럼을 의미한다.
만약 id 컬럼으로 정렬하려면 some_columnid로 바꾸면 된다.

PHP 코드로 이를 구현하려면 PDO 또는 MySQLi 등의 라이브러리를 사용할 수 있다.
아래는 PDO를 사용한 예제이다.

php
<?php

   $host
= '127.0.0.1';
   $db = 'database_name';
   $user = 'username';
   $pass = 'password';
   $charset = 'utf8mb4';

   $dsn = 'mysql:host=$host;dbname=$db;charset=$charset';
   $pdo
= new PDO($dsn, $user, $pass);

   $targetId = 5;

   $query
= ' SELECT row_num
                  FROM ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) as row_num FROM users
              ) AS temp
              WHERE id = ? '
;

   $stmt = $pdo->prepare($query);
   $stmt->execute([$targetId]);
   $row = $stmt->fetch(PDO::FETCH_ASSOC);

   if
($row) {
      echo 'ID {$targetId}의 순위는 ' . $row['row_num'] . '이다.
'
;
   }
   else {
      echo 'ID {$targetId}에 해당하는 레코드가 없다.';
   }
?>

위 코드는 users 테이블에서 id 컬럼을 기준으로 정렬하여 특정 id의 순위를 반환한다

Tags  #mySQL  #row_number  

😀 닉네임
🧨 댓글내용 ( 주의: HTML 태그 및 URL은 저장시 제거됩니다. )