2011-01-04 1 views
3

에서 ROW_NUMBER()를 사용하여 :PostgreSQL의 : 나는 자신의 "가상 돈"으로 분류되어 플레이어의 목록을 표시하는 PHP 스크립트를 페이징 출력

$sth = $db->prepare(" 
select u.id, 
     u.first_name, 
     u.city, 
     u.avatar, 
     m.money, 
     u.login > u.logout as online 
from pref_users u, pref_money m where 
     m.yw=to_char(current_timestamp, 'IYYY-IW') and 
     u.id=m.id 
order by m.money desc 
limit 20 offset ? 
"); 
$sth->execute(array($_GET['offset'])); 

나는 PHP 변수를 사용하여 목록에서 플레이어의 위치를 ​​표시하려면 $ pos는 이름과 그 이상의 데이터를 인쇄하는 동안 루프에서 증가합니다.

저는 여러 가지 이유로 PHP 대신 SQL 문에서 그 위치를 원합니다.

$sth = $db->prepare(" 
select u.id, 
     row_number() + ? as pos, 
     u.first_name, 
     u.city, 
     u.avatar, 
     m.money, 
     u.login > u.logout as online 
from pref_users u, pref_money m where 
     m.yw=to_char(current_timestamp, 'IYYY-IW') and 
     u.id=m.id 
order by m.money desc 
limit 20 offset ? 
"); 
$sth->execute(array($_GET['offset'], $_GET['offset'])); 

그러나 오류 얻을 : 그래서 나는 다음과 같은 노력하고있어 나는 (m.money) 이상 를 추가하지만 얻으려고 오버 절

필요 창 함수 호출을 구문 오류.

나는 아마도 Window Functions 의사를 오해하고 있습니다.

+0

무엇 "구문 오류"입니까? 그리고 어떤 구문을 시도 했습니까? OVER와 ORDER BY를 사용해야하고, 당신이 한 일을 보여주십시오. OVER (ORDER BY m.money ASC) –

+1

@nate c : PHP에서 준비된 문으로 SQL 삽입이 문제가 될 것이라고 생각하지 않습니다. –

답변

1

확인하려면 : http://www.postgresql.org/docs/8.4/interactive/functions-window.html

당신은 전체 쿼리로 절에 같은 순서를 포함하도록 이상()를해야합니다

$sth = $db->prepare(" 
select u.id, 
     row_number() OVER (order by m.money desc) + ? as pos, 
     u.first_name, 
     u.city, 
     u.avatar, 
     m.money, 
     u.login > u.logout as online 
from pref_users u, pref_money m where 
     m.yw=to_char(current_timestamp, 'IYYY-IW') and 
     u.id=m.id 
order by m.money desc 
limit 20 offset ? 
"); 
$sth->execute(array($_GET['offset'], $_GET['offset'])); 
+0

감사합니다. 주문에 대해 알지 못했습니다. –

1

당신은 사용자 노트에 row_number() OVER (ORDER BY m.money) + ?

관련 문제