sql 이전행 wr_num 값을 구하고자 합니다.
본문
게시물 순서를 바꾸는 연습을 하고있습니다.
현재 wr_id 를 이용해서 이전행의 wr_num값을 가져와서 서로 바꿔주면 될거 같은데...
잘 안되네요..
$sql="with ordered_example as (select wr_id, wr_num , lag(wr_num) over(order by wr_num) as prev_num from g5_write_{$bo_table}) select wr_id, wr_num, prev_num from ordered_example where wr_id='$wr_id'";
$result=sql_query($sql);
$row=sql_fetch_array($result);
print_r($row);
gtp에 검색해서 구문을 짰는데... $row값이 Array ( ) 빈값으로 출력됩니다.
어떻게 이전행을 구할 수 있나요?
조언부탁드립니다.
gpt 예제입니다.---------------------
WITH ordered_example AS (
SELECT
id,
num,
LAG(num) OVER (ORDER BY num) AS previous_num
FROM
example
)
SELECT
id,
num,
previous_num
FROM
ordered_example
WHERE
id = 3;
답변 3
WITH : https://dev.mysql.com/doc/refman/8.0/en/with.html
LAG : https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html
MySQL 의 버전이 8.0 이상인지 또는 MariaDB 에서 WITH, LAG 구문이 지원되는 버전인지
확인이 필요한 SQL 구문입니다.
구동중인 DBMS 가 WITH, LAG syntax 를 지원하고
쿼리에 작성된 필드와 테이블 이름이 올바르며
조건에 해당되는 데이터가 있다면
정상처리 되는 문제없는 쿼리와 소스이며
문제가 있는 경우 다음처럼 확인해 볼수 있습니다.
...
print_r($row);
print_r(sql_error_info());
한번 해봤는데 맞는지 모르겠네요...
WITH aaa AS (
SELECT
LAG(wr_id) OVER (ORDER BY wr_id) AS previous_num
, wr_id
FROM
g10_write_notice
)
SELECT * FROM g10_write_notice WHERE wr_id = (
SELECT previous_num FROM aaa
WHERE wr_id = 4
)
where wr_id < e1.wr_id <==이렇게 하면 안됩니다
wr_id 20(이동할 글) 바로 이전의 wr_id 19가 1번글의 댓글이 될 수도 있으니까요
다음처럼 해야할 것입니다
where wr_is_comment =0 and wr_id < $wr_id