를 추가 :MySQL의 : 테이블을 감안할 때 위치 열
id | score | position
=====================
1 | 20 | 2
2 | 10 | 3
3 | 30 | 1
어떤 쿼리 내가 최적 (Null 허용되지 않음) 점수 열을 사용하여 위치 열을 설정하는 데 사용할 수있는?
은 (내가 전에 본 적이 확신하지만 난 그것을 찾기 위해 올바른 키워드를 얻이 수없는 것!)
를 추가 :MySQL의 : 테이블을 감안할 때 위치 열
id | score | position
=====================
1 | 20 | 2
2 | 10 | 3
3 | 30 | 1
어떤 쿼리 내가 최적 (Null 허용되지 않음) 점수 열을 사용하여 위치 열을 설정하는 데 사용할 수있는?
은 (내가 전에 본 적이 확신하지만 난 그것을 찾기 위해 올바른 키워드를 얻이 수없는 것!)
set @rank = 0;
update tbl a join (select score, @rank:[email protected]+1 as rank from tbl group by score
order by score desc) b on a.score = b.score set a.position = b.rank;
할 것 일거에 위치를 업데이트 장난. 동등한 점수는 같은 위치가됩니다
SELECT * FROM your_table ORDER BY score;
질문에 주어진다. 위의 예에서 'ORDER BY'표현식을 사용하여 데이터베이스 행 순서를 사용하여 원하는 기능을 수행 할 수 있습니다. 어떤 좋은 이유로 포지션 칼럼을 원한다고하더라도, 어쨌든 스코어 칼럼에 대한 인덱스가 존재할 가능성이 가장 높습니다. 대부분의 경우 포지션 칼럼과 똑같은 일을합니다. 그 또는 나는 당신의 질문을 완전히 오해합니다.
감사합니다. amn, yes, position은 중복되었지만 최적화를 위해 사용해야합니다. 위치 열은 자주 생성되는 위치의 캐시 된 값입니다. (위치를 얻으 려 할 때마다 정렬하는 것이 매우 비쌉니다. 예를 들어 5 분마다 설정하는 것이 좋습니다.) – Pool
점수 열을 색인하도록 명시 적으로 말하면 데이터베이스 시스템 자체가 최적화를 수행하는 것이 훨씬 낫습니다. 다음 SQL 표현식을 사용하십시오. CREATE INDEX score_index ON your_table (score); – amn
나는 이미 색인으로 점수를 가지고 있습니다. – Pool
아, 고맙습니다. 'rank'는 이전에 사용해야했던 키워드였습니다! – Pool