반응형
다음 MySQL 테이블을 사용합니다.
+-----------------------------+
+ id INT UNSIGNED +
+ name VARCHAR(100) +
+-----------------------------+
name ASC
로 정렬 할 때 단일 행과 테이블의 다른 행 사이에서 해당 위치를 선택하려면 어떻게해야합니까? 따라서 테이블 데이터가 다음과 같으면 이름별로 정렬 할 때 :
+-----------------------------+
+ id | name +
+-----------------------------+
+ 5 | Alpha +
+ 7 | Beta +
+ 3 | Delta +
+ ..... +
+ 1 | Zed +
+-----------------------------+
해당 행의 현재 위치를 가져 오는 베타
행을 어떻게 선택할 수 있습니까? 내가 찾고있는 결과 세트는 다음과 같습니다.
+-----------------------------+
+ id | position | name +
+-----------------------------+
+ 7 | 2 | Beta +
+-----------------------------+
간단한 SELECT * FROM tbl ORDER BY name ASC
를 수행 한 다음 PHP에서 행을 열거 할 수 있지만 단일 행에 대해 잠재적으로 큰 결과 집합을로드하는 것은 낭비적인 것 같습니다.
해결 방법
이것을 사용하십시오 :
SELECT x.id,
x.position,
x.name
FROM (SELECT t.id,
t.name,
@rownum := @rownum + 1 AS position
FROM TABLE t
JOIN (SELECT @rownum := 0) r
ORDER BY t.name) x
WHERE x.name = 'Beta'
... 고유 한 위치 값을 얻습니다. 이:
SELECT t.id,
(SELECT COUNT(*)
FROM TABLE x
WHERE x.name <= t.name) AS position,
t.name
FROM TABLE t
WHERE t.name = 'Beta'
... 동점에 동일한 가치를 부여합니다. IE : 두 번째 위치에 두 개의 값이 있으면 첫 번째 쿼리가 둘 중 하나에 2의 위치를, 다른 하나에 3의 위치를 제공 할 때 둘 다 위치가 2가됩니다.
참조 페이지 https://stackoverflow.com/questions/3614666
반응형
'MySql' 카테고리의 다른 글
MySQL은 현재 연결 정보를 표시합니다. (0) | 2020.11.09 |
---|---|
MySQL select timestamp as date string (0) | 2020.11.09 |
MySQL Auto TimeStamp new entry to DB (phpMyAdmin) (0) | 2020.11.09 |
MySQL How do I set MySQL as the default database in Rails 3? (0) | 2020.11.09 |
MySQL은 가장 최근 행에만 가입 하시겠습니까? (0) | 2020.11.09 |
댓글