2014-04-04 1 views
1

는 이미 다른 사람이 질문 - 오버 플로우 스택 확인 포지션, 그러나 아무도는 다음을 수행하는 방법을 설명하지 :MySQL을 받기 행

내가 예약 대기열을 제어하는 ​​응용 프로그램을 가지고 있고 각 행에 대해 나열 할 필요

positionTotal - 더 낮은 ID를 가진 모든 활성 (상태) 행을 기반으로 한 위치를 나타냅니다. positionSamePeople - 더 낮은 ID와 동일한 사용자 번호를 가진 모든 활성 (상태) 행을 기반으로 한 위치를 나타냅니다.


예약 테이블 :

+---------------------------------------+ 
+ id INT AI        + 
+ status TINYINT (0-Inactive/1-Active) + 
+ people INT       + 
+---------------------------------------+ 

검색어 :

SELECT * FROM reservation 
+----------------------+ 
+ id | status | people + 
+----------------------+ 
+ 1 | 1 | 3 + 
+ 2 | 0 | 1 + 
+ 4 | 1 | 3 + 
+ 6 | 1 | 1 + 
+ 8 | 1 | 2 + 
+ 9 | 0 | 3 + 
+ 10 | 1 | 3 + 
+ 11 | 1 | 2 + 
+----------------------+ 

내가 원하는 무엇 :

+------------------------------------------------------------+ 
+ id | status | people | positionTotal | positionSamePeople + 
+------------------------------------------------------------+ 
+ 1 | 1 | 3 |  1  |   1   + 
+ 4 | 1 | 3 |  2  |   2   + 
+ 6 | 1 | 1 |  3  |   1   + 
+ 8 | 1 | 2 |  4  |   1   + 
+ 10 | 1 | 3 |  5  |   3   + 
+ 11 | 1 | 2 |  6  |   2   + 
+------------------------------------------------------------+ 

내가 positionTotal을 계산 한 후 SELECT * FROM reservation WHERE status=1를 조회 할 수 있으며 PHP의 positionSamePeople이지만 좋은 옵션이 아닙니다.

답변

1

이 하위 쿼리와 함께 할 쉽게 :

SELECT r1.*, 
    (SELECT COUNT(*) +1 
    FROM reservation r2 
    WHERE r2.status = 1 
    AND r2.id < r1.id) AS positionTotal, 
    (SELECT COUNT(*) +1 
    FROM reservation r3 
    WHERE r3.status = 1 
    AND r3.people = r1.people 
    AND r3.id < r1.id) AS positionSamePeople 
FROM reservation r1