개발/sql

[Sql/php] rownum 결과 값에서 몇번째 행인지 구하기

반응형

SQL 쿼리를 통해 데이터를 가져와서 해당 데이터가 몇번째에 위치해 있는지 구할때 ROWNUM 기능을 활용해 불러올 수 있다. 

 

나의 경우에는 해당 날짜의 주문건을 불러와 주문번호 순서대로 1부터 차례대로 번호를 매기는 작업이 필요하여 아래와 같이 쿼리문을 작성하였다.

SELECT @ROWNUM: = @ROWNUM + 1 AS rownum, od_id
FROM table as a, ( SELECT @ROWNUM: = 0 ) r
WHERE od_invoice_time between '2023-05-31 00:00:00' and '2023-05-31 23:59:59'
ORDER BY od_id ASC

 

그러면 이렇게 조건에 해당하는 데이터들이 순서대로 번호가 매겨지게 된다.

 

 

 

이 중에서도 특정 데이터가 몇번째에 해당하는지 알고 싶으면 한번더 Select 구문을 사용하면 된다.

SELECT rownum from  (기존 조건) t where 특정 데이터 조건

SELECT rownum
from
  (SELECT @ROWNUM: = @ROWNUM + 1 AS rownum, od_id
    FROM table as a,
      ( SELECT @ROWNUM: = 0 ) r
    WHERE od_invoice_time between '2023-05-31 00:00:00' and '2023-05-31 23:59:59'
    ORDER BY od_id ASC
) t
where od_id = '2023053112162567'

 

여기서 주의할 점은 from (   조건문  )  뒤에 꼭 Alias를 지정해주어야한다. (여기서는 임의로 t로 넣음) 넣지 않으면 My SQL에서는 무조건 Every derived table must have its own alias 에러가 뜬다. 알파벳 아무거나 넣으면 된다.

 

 

 

 

 

 

PHP에서는 아래와 같이 코드를 넣어주면, 특정 조건에 해당하는 데이터중 해당 데이터가 몇번째에 위치하고 있는지 알 수 있다.

for($i=1; $row=sql_fetch_array($result); $i++) {
    
    $sql_num = "SELECT rownum from (SELECT @ROWNUM := @ROWNUM + 1 AS rownum, od_id FROM table as a, (SELECT @ROWNUM:=0) r 
    WHERE od_invoice_time between '{$fr_date} 00:00:00' and '{$to_date} 23:59:59' ORDER BY od_id ASC) t where od_id = '{$row['od_id']}'";
    $res_num = sql_query($sql_num);
    $rm = sql_fetch_array($res_num);

    echo $rm['rownum'];  //25

}

(특정날짜에 해당하는 주문건 중에서, 주문번호를 오름차순으로 정렬하였을때 해당 주문번호를 가진 주문은 몇번째인가)

 

 

 

 

반응형