최초 작성일 : 2023-09-07 | 수정일 : 2023-09-10 | 조회수 : 660 |
MySQL의 테이블에 저장된 특정 레코드가 몇 번째인지 알기 위해서는 일반적으로 순위를 반환하는 SQL 쿼리를 사용한다.
이는 ROW_NUMBER()
함수를 활용해 가능하며, WHERE 절과 함께 사용하면 특정 레코드의 순위를 알 수 있다.
예를 들어, users
라는 테이블에서 id
컬럼이 5인 사용자의 순위를 조회하고 싶다면, 다음과 같은 SQL 쿼리를 사용할 수 있다.
sqlSELECT 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_column
을 id
로 바꾸면 된다.
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