mysql 에서 update시 순서대로 값 먹여서 업데이트하기 (mysql sequential numbering update)
study/mysql 2013. 2. 20. 03:43mysql에서 가끔 보면 PK가 아닌 부분에서 indexing을 걸지않고 내부에서 indexing 역할하는 변수를 만드는데 이빨빠지는 경우가 많다 (잦은 경우에 많이 일어난다. 예를 들어서 특정 사용자별로 ordering을 줘야할 때 따로 order같은데서 남길 필요가 없는 데이터라서 날릴 때 이빨이 빠지게 된다)
이게 한 두개면 그냥 console에서 업데이트를 박아버리던가 할텐데 이게 양이 늘어나면 무지막지하게 귀찮으며 비효율적이다. 프로그래머가 병목자원이라 불리는 이 시대에 이딴 짓을 할 시간이 어디있겠는가.
이럴 때 방금 전에 올린 글 http://oddly.tistory.com/68 을 보면 변수를 선언해서 사용하는데 이걸 좀 응용해봤다
Table student 가 column 이 name, score, rank 가 있을 때
Hwangho / 70 / 1
Minho / 50 / 2
Changho / 40 / 3
Yeonho / 30 / 4
Hyunho / 10 / 5
같은 식으로 있는데 Minho가 빠져버리면 1,3,4,5로 이빨이 빠져버리는데.. 이럴 때 DB에서 싸그리 처리를 하려면..
SELECT @rank:=0;
UPDATE student SET rank=@rank:=@rank+1 ORDER BY rank
이런식으로 하면 1,2,3,4로 다시 이쁘게 들어간다
생각보다 이런 걸 쓸일이 많으므로 숙지해두는게 좋을 것 같다.
'study > mysql' 카테고리의 다른 글
mysql select 할 때 순환자 넘버링하기 (iterator numbering) (0) | 2013.02.20 |
---|---|
mysql - DISTINCT를 잘 이용하자 (0) | 2012.07.03 |
PHP + MySQL에서 FETCH 방식에 따른 차이 (1) | 2010.12.26 |