mysql에서 가끔 보면 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로 다시 이쁘게 들어간다


생각보다 이런 걸 쓸일이 많으므로 숙지해두는게 좋을 것 같다.

Posted by TY
,

table test 의 column이


name, score가 있다고 할 때


John / 50

Matthew / 40

Cain / 70


일 때 


select @rownum:=@rownum+1 as num, t.* from test t, (SELECT @rownum:=0) r 


로 하면 


num/name/score


1 / John / 50

2 / Matthew / 40

3 / Cain / 70


로 되고


select @rownum:=@rownum+1 as num, t.* from test t, (SELECT @rownum:=0) r  ORDER BY score DESC


로 하면


1 / Cain / 70

2 / John / 50

3 / Metthew / 40


로 나온다

Posted by TY
,