[SQL] 가게 순위 위치로 MySQL의 업데이트 문
SQL가게 순위 위치로 MySQL의 업데이트 문
나는 쿼리 주위에 내 머리를 얻으려고 난 그냥 그것을 알아낼 수 없습니다. 누군가가 나에게 포인터를 주면 내가 감사하겠습니다. 내가 달성하기 위해 노력하고있어 간단한 예를 들어, 나는 데이터베이스에 이러한 기록을 가지고
Score|Ranking
-------------
100 |0
200 |0
300 |0
그리고 나는 순위 필드는 결과가 있어야한다, 그래서 가장 높은 점수를 가지고 사람을 기준으로 1,2,3를 포함하고 싶습니다 :
Score|Ranking
-------------
100 |3
200 |2
300 |1
지금이 순간, 나는이 모든 레코드에 대해 다음 루프를하고 있지만, 실제로는 그 몇 천 될 수 있다고 주어진 해요 - 영원히 취할 수있는! 사람이 한 번에 이런 짓을 했을까 마법의 질의에 대한 아이디어가 있습니까?
해결법
-
==============================
1.MySQL은, 당신은 ROW_NUMBER 사용할 수 있습니다.
MySQL은, 당신은 ROW_NUMBER 사용할 수 있습니다.
다음은 SELECT에서 사용의 예입니다 :
select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc;
이 같은 SELECT를 사용하여 INTO INSERT 경우에, 당신은 당신의 순위를 얻을 것이다.
-
==============================
2.여기에 그것을 할 수있는 방법이있다 :
여기에 그것을 할 수있는 방법이있다 :
SET @r=0; UPDATE table SET Ranking= @r:= (@r+1) ORDER BY Score DESC; /* use this if you just want to pull it from the db, but don't update anything */ SET @r=0; SELECT *, @r:= (@r+1) as Ranking FROM table ORDER BY Score DESC;
-
==============================
3.이 변수의 @rc으로 증가하여 선수 순위가 인라인 업데이트 문을 작성합니다. 나는 그것이 잘 작동하고 DB 측에 모든 것을 유지, 매우 유사한 경우에 여러 번 사용했습니다.
이 변수의 @rc으로 증가하여 선수 순위가 인라인 업데이트 문을 작성합니다. 나는 그것이 잘 작동하고 DB 측에 모든 것을 유지, 매우 유사한 경우에 여러 번 사용했습니다.
SET @rc = 0; UPDATE players JOIN (SELECT @rc := @rc + 1 AS rank, id FROM players ORDER BY rank DESC) AS order USING(id) SET players.rank = order.rank;
ID가 당신의 선수 테이블의 기본 키로 간주됩니다.
-
==============================
4.
SET @r = 0; UPDATE players JOIN (SELECT @r := @r + 1 AS rank, id FROM players ORDER BY rank DESC) AS sorted USING(id) SET players.rank = sorted.rank;
-
==============================
5.나는 [간격 SQL 업데이트 기능] 당신에게 그 일을 내 방식을 보여주는거야
나는 [간격 SQL 업데이트 기능] 당신에게 그 일을 내 방식을 보여주는거야
고르다:
set @currentRank = 0, @lastRating = null, @rowNumber = 1; select *, @currentRank := if(@lastRating = `score`, @currentRank, @rowNumber) `rank`, @rowNumber := @rowNumber + if(@lastRating = `score`, 0, 1) `rowNumber`, @lastRating := `score` from `table` order by `score` desc
최신 정보:
set @currentRank = 0, @lastRating = null, @rowNumber = 1; update `table` r inner join ( select `primaryID`, @currentRank := if(@lastRating = `score`, @currentRank, @rowNumber) `rank`, @rowNumber := @rowNumber + if(@lastRating = `score`, 0, 1) `rowNumber`, @lastRating := `score` from `table` order by `score` desc ) var on var.`primaryID` = r.`primaryID` set r.`rank` = var.`rank`
나는 그것이 작동하는지 테스트를 제외하고이 일에 어떤 성능 검사를하지 않았다
from https://stackoverflow.com/questions/3196971/mysql-update-statement-to-store-ranking-positions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PHP SQL SELECT 경우 여러 단어 검색 항목과 같은 (0) | 2020.06.27 |
---|---|
[SQL] SSIS에 대한 권장 학습 재료를 무엇입니까? [닫은] (0) | 2020.06.27 |
[SQL] 고유 번호 생성에는 mysql (0) | 2020.06.27 |
[SQL] 좋은 C 번호가되는 SQLException을 잡기 및 재 시도에 대한 코딩 스타일이란 (0) | 2020.06.27 |
[SQL] 여러 테이블에서 INSERT INTO 표 (0) | 2020.06.27 |